Drukuj formularz gdy wypełniony
by vbatools on Nov.08, 2014, under Porady, Word
W aplikacji MS Word nie ma zdarzenia typu _beforeprint, pozwalającego na reakcję przed podjęciem wydruku*. Jednak w niektórych przypadkach chcemy odstąpić od drukowania, gdy np. w formularzu nie wypełniono wszystkich niezbędnych pól.
Aby poradzić sobie z takim przypadkiem musimy podłączyć kod, który sprawdzi wszystkie pola pod względem obecności tekstu (lub te na których nam zależy tworząc wyjątki). W przypadku braku tekstu, procedura VBA jaką wprowadzimy do naszego dokumentu wyświetli komunikat informacyjny zamiast dopuścić do jego wydrukowania.
Uruchomienie kodu musi być w tym przypadku inicjowane odrębnym przyciskiem osadzonym w menu (szybkie kroki lub wprowadzona do struktury XMLowej pliku) lub wprost w dokumencie (z podpiętym makrem), a dokument musi zostać zapisany z rozszerzeniem .docm aby wprowadzony kod nie uległ usunięciu. Rozwiązaniem mniej inwazyjnym jest też uruchomienie przez [Alt+F8]
Należy pamiętać że zwykłe drukowanie nie bądzie kontrolowane przez kod. Nie wykluczone że w przyszłych wersjach będzie można przedstawioną poniżej procedurę podłączyć do uzupełnionego zdarzenia.
Sub Drukuj_formularz()
'MVP OShon VBATools.pl
Const c$ = "Nie wypełniono wszystkich pól formularza!"
Dim b As Bookmark, d As Boolean
For Each b In ActiveDocument.Bookmarks
If Len(Trim(b.Range.Fields(1).Result.Text)) = 0 Then _
d = True: MsgBox c, vbExclamation, "VBATools.pl": Exit For
Next
If d = False Then Application.PrintOut
End Sub
* Można stworzyć klasę reagującą na te zdarzenie (o tym tutaj) i wywołać tą procedurę.
Instrukcja podłączenia kodu do środowiska developerskiego w MS office dostępna pod tym artykułem.
W przypadku kiedy zachodzi potrzeba tworzenia seryjnego formularzy, bądź hurtowego pobierania danych z już utworzonych oto rozwiązanie w formie dodatku: Dane szablonów Word
(c) Shon Oskar – www.VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.