|
Corel FORUM Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych |
|
Makra - Makro do sprawdzania czy plik jest otwarty
TheMan258 - 18 Marzec 2021, 22:53 Temat postu: 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 - 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
TheMan258 - 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 - 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 - 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 - 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.
|
|