VBATools

Ukrycie tekstu niewypełnionych elementów obiektów formularza

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

W_formularz

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ń.

W_formularz_widok

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:

W_formularz_wydruk

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

4 Comments for this entry

  • Zyga

    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?

  • Łukasz

    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.

    • vbatools

      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

Leave a Reply