VBATools

Drukuj formularz gdy wypełniony

by 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.
:, , , ,

Leave a Reply