Ukrycie tekstu niewypełnionych elementów obiektów formularza
by vbatools on Nov.02, 2011, under Porady, Word
W MS Word, tworzenie formularza realizuje się poprzez umieszczenie kontrolek w dokumencie. W zależności od ich rodzaju możemy wyposażyć je w listę wyboru, datę opartą na kalendarzu, tekst umieszczony w polu lub inny formant.
Rys.1 Tworzenie formularza
Jednakże podczas wydruku dokumentu możemy napotkać na fakt iż elementy niewypełnione są drukowane jako podpowiedzi nie jako pusta, niewypełniona przestrzeń.
Rys.2 Efekt niepożądany
Jak ukryć teksty, które są zbędne?
Aplikacja nie posiada ustawień które mogłyby być pomocne w tym przypadku. Jedynym ratunkiem jest oprogramowanie pliku.
MS Word w swoich procedurach zdarzeniowych nie posiada funkcjonalności jaka jest częścią Excela: BeforePrint
Należy w tym celu wbudować klasę, która będzie realizowała ten cel.
Wpierw należy uruchomić dewelopera VBA [Alt+F11] utworzyć klasę i postępować dalej zgodnie z poniższą instrukcją.
'--------------- Umieść w ThisDocument Option Explicit Dim oAppClass As New Class1 Private Sub Document_Open() Set oAppClass.oApp = Word.Application 'aby przetestować bez restartu pliku należy uruchomić tą procedurę End Sub '--------------- Umieścić w klasie Class1 Option Explicit Public WithEvents oApp As Word.Application Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean) 'MVP OShon from VBATools.pl Dim sh As ContentControl With Application.ActiveDocument For Each sh In .ContentControls If sh.ShowingPlaceholderText = True Then sh.Range.Font.Color = wdColorWhite Next .PrintOut Background:=False 'tutaj drukuje z wybielonymi polami For Each sh In .ContentControls If sh.ShowingPlaceholderText = True Then sh.Range.Font.Color = wdColorGray50 Next End With Cancel = true End Sub
Aby plik realizował kod należy go zapisać w standardzie *.docm, oraz pamiętać iż uruchomienie makr jest konieczne.
Wydruk pliku z kodem:
Rys.3 Podgląd wydruku dokumentu
(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.
August 15th, 2015 on 18:57
W związku z rozwiązaniem “Ukrycie tekstu niewypełnionych elementów obiektów formularza” mam pytanie. Czy jest możliwe żeby aby plik realizował kod w standardzie .dotm?
August 15th, 2015 on 22:50
Dotm to szablon. Możesz do Docm przed jego konwersją umieścić kod aby potem zapisać jako Dotm. Nie wydaje mi się to jakimś problemem.
April 29th, 2019 on 11:13
Cześć.
Dzięki za kod, jest super. Takiego czegoś szukałem.
Mam jednak mały problem z drukowaniem. Tzn. niezależnie jak skonfiguruje drukowanie np. “Drukuj tylko stronę 1” Word drukuje cały dokument. Czy można to w jakiś sposób poprawić w tym makro? Nie znam się na tym i nie umiem sobie sam pomóc.
April 29th, 2019 on 11:52
Ponieważ kod odnosi się do postępowania standardowego to w tym miejscu
.PrintOut Background:=False
trzeba wkleić kod ograniczający obszar drukowania do obszaru jakim jesteś zainteresowany