Corel FORUM Strona Główna Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Makro do sprawdzania czy plik jest otwarty
Autor Wiadomość
TheMan258 
Początkujący
TheMan258


Wersja CorelDRAW: x5
Wiek: 33
Dołączył: 22 Lut 2021
Posty: 14
Skąd: Kraków
  Wysłany: 18 Marzec 2021, 22:53   Makro do sprawdzania czy plik jest otwarty

Witam,
czy jest jakiś sposób, aby makro sprawdziło (np wyświetliło komunikat) podczas zapisywania pliku czy dokument jest otwarty na innym komputerze? (Coś podobnego do zaimplementowanego corelowskiego komunikatu przy próbie nadpisania otwartego pliku)

Pracuję w firmie na współdzielonym dysku i zdarza się tak, że ktoś zapomni sobie wyłączyć jakiś plik, przez co nie jestem w stanie go edytować lub makro, które próbuję użyć potrafi zawiesić corela przez to, że któryś z plików jest otwarty gdzie indziej i corel nie jest w stanie go sobie nadpisać. Przeszukałem cały internet, ale są takie macra tylko do excela. Za wszelką pomoc bardzo dziękuję :poklon bo są tutaj prawdziwi magicy od kodowania :ok
 
 
Martin Nez 
Doradca
Grafik?


Wersja CorelDRAW: 2019
Pomógł: 14 razy
Dołączył: 29 Sty 2011
Posty: 114
Skąd: Czmoń
Wysłany: 19 Marzec 2021, 15:41   

Witam,
W Corelu X8 wyskakuje mi okienko informujące o tym, że ktoś używa otwieranego pliku (załącznik). Jeśli używasz tej lub nowszej wersji możliwe, że zaznaczyłeś ptaszek na dole, możesz to odblokować w menu Narzędzia > Opcje > Ostrzeżenia > "Ostrzegaj, gdy pliki są tylko do odczytu".

Pozdr,
MN

Przechwytywanie.PNG
Pobierz Plik ściągnięto 326 raz(y) 5.23 KB

 
 
TheMan258 
Początkujący
TheMan258


Wersja CorelDRAW: x5
Wiek: 33
Dołączył: 22 Lut 2021
Posty: 14
Skąd: Kraków
Wysłany: 19 Marzec 2021, 20:13   

Martin Nez napisał/a:
Witam,
W Corelu X8 wyskakuje mi okienko informujące o tym, że ktoś używa otwieranego pliku (załącznik). Jeśli używasz tej lub nowszej wersji możliwe, że zaznaczyłeś ptaszek na dole, możesz to odblokować w menu Narzędzia > Opcje > Ostrzeżenia > "Ostrzegaj, gdy pliki są tylko do odczytu".

Pozdr,
MN

Dziękuję za odpowiedź jednak to nie rozwiązuje mojego problemu.
Przy normalnym zapisywaniu pliku w Corelu x5 też ten komunikat się pokazuje, ale problem pojawia się przy zapisaniu przez makro wówczas corel wysypuje się wtedy. Myślę o dodaniu warunku do makra, lecz nie potrafię znaleźć odpowiedzi, co dopisać i czy w ogóle w VBA można coś takiego dodać.
 
 
Martin Nez 
Doradca
Grafik?


Wersja CorelDRAW: 2019
Pomógł: 14 razy
Dołączył: 29 Sty 2011
Posty: 114
Skąd: Czmoń
Wysłany: 19 Marzec 2021, 22:38   

Bez kodu makra nie pomogę. ;-) Samego sprawdzania czy plik nie jest gdzieś otwarty nie da się zrobić, ponieważ... jest otwarty u Ciebie. :-) Wrzuć kod, spróbujemy poprawić makro, aby się nie zawieszało.
Pozdr,
MN
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 27 Czerwiec 2021, 21:07   

TheMan258 napisał/a:
czy jest jakiś sposób, aby makro sprawdziło (np wyświetliło komunikat) podczas zapisywania pliku czy dokument jest otwarty na innym komputerze?


Znalazłem gotowy kod więc załączam razem z instrukcją:
Kod:
Function IsFileOpen(fName As String) As Boolean
'''
''' Zrodlo: https://www.ozgrid.com/forum/index.php?thread/62861-is-file-open-on-network/&postID=577730#post577730
'''
    Dim ff As Integer, errNum As Integer
   
    On Error Resume Next 'start obslugi bledow
   
    ff = FreeFile '@see: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/freefile-function
   
    Open fName For Input Lock Read As #ff '@see: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/open-statement
    Close ff
   
    errNum = Err 'numer bledu
   
    On Error GoTo 0 'czyszczenie bufora bledow i powrot do normalnej pracy
   
    IsFileOpen = (errNum <> 0)
End Function

Sub test()
    Dim file As String
    file = "D:\CorelVBA\Beznazwy-1.cdr"
   
    If IsFileOpen(file) Then
        Debug.Print "Niestety plik """ & file & """ jest w uzyciu"
        MsgBox "Niestety plik """ & file & """ jest w uzyciu", vbCritical, "Test otwierania pliku"
    Else
        Debug.Print "Plik """ & file & """ jest nieuzywany"
        MsgBox "Plik """ & file & """ jest nieuzywany", vbInformation, "Test otwierania pliku"
    End If
End Sub


Mechanizm sprawdza tylko czy plik jest otwarty, ale nie sprawdza czy przez kogoś czy bezpośrednio w Corelu. Operuje na funkcji Open z VB.

Problem w tym, że w VBA czyli VB6 nie było jeszcze obsługi blokady pliku na takim poziomie jak np. w .NET
Możliwe, że z poziomu VSTA albo samodzielniej aplikacji pisanej w VB.NET typu exe, dało by się dowiedzieć czegoś więcej.
VB jest fajny do prostych zadań. Poza tym kod makra pisany w VB nawet zabezpieczony da się dość łatwo odszyfrować.
 
 
TheMan258 
Początkujący
TheMan258


Wersja CorelDRAW: x5
Wiek: 33
Dołączył: 22 Lut 2021
Posty: 14
Skąd: Kraków
Wysłany: 18 Wrzesień 2021, 12:36   

Bardzo dziękuję za odpowiedź :-) . Problem został rozwiązany jednak w trochę inny sposób mianowicie za pomocą obsługi błędów. Jeśli dokument jest otwarty na innym komputerze to makro zapisze w tej samej lokalizacji otwarty plik z nazwą dokumentu plus dodatkowo wstawi jedynkę.
Kod:
Err: ActiveDocument.SaveAs "Dowolna ścieżka" + Left$(Namefile, Len(Namefile) - 4) & " 1" & ".cdr", SaveOptions

Drobna uwaga jeśli plik będzie bez nazwy to pojawi się błąd.
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.1 sekundy. Zapytań do SQL: 15