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

Recently Active Members

Profile picture of vbatools
Profile picture of Anorak
Profile picture of Karol Stilger
Profile picture of Joanna Subik
Profile picture of marcinmachalowski
Profile picture of programistaaccess
Profile picture of piotrpawlik
Profile picture of Emil Wasilewski
Profile picture of kicekpicek
Profile picture of coldfusion
Profile picture of Gosia Borzęcka
Profile picture of lukaszch
Profile picture of itadministracja
Profile picture of farbenia
Profile picture of Łukasz Kałużny
Profile picture of kabzinski
Profile picture of rtynski
Profile picture of leszekbetlinski
Profile picture of Iv
Profile picture of Justyna Spychała