|
Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych
|
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ę bo są tutaj prawdziwi magicy od kodowania |
|
|
|
|
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. |
|
|
|
|
|
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
|
|
|
|
|
|
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.11 sekundy. Zapytań do SQL: 15 |
|
|