Word 2010 - Kopf-und Fußzeile per VBA ein-und ausblenden

firefly100

Newbie
Registriert
Aug. 2007
Beiträge
6
Hallo Zusammen,

ich arbeite gerade an einer Dokumentenvorlage für unsere Inbetriebnehmer. Diese nehmen für die Inbetriebnahme von Anlagen gewisse Dokumente mit z.B. Abnahmeprotokolle. Es müssen aber nicht immer alle Protokolle ausgedruckt werden.
Ich habe jetzt eine Dokumentenvorlage nachfolgendem Muster erstellt.

1. Seite
Checkboxes für die einzelnen Protokolle

2. Seite
z.B. Abnahmeprotokoll 1

3. Seite
z.B. Abnahmeprotokoll 2

Der Inbetriebnehmer braucht aber nur Abnahmeprotokoll 1, d.h. Checkbox 1 aktiviert, Checkbox 2 deaktiviert.

Bis jetzt funktioniert es auch soweit, dass die einzelnen Protokolle ein- und ausgeblendet werden. Jedoch bleiben die Kopf-und Fußzeilen der ausgeblendeten Protokolle bestehen.
Wie kann ich die Kopf- und Fußzeilen auch aus- und einblenden?


Anbei mein Code:
Sub Checkbox1_Click()
Dim auttxt1 As Object
Dim auttxt2 As Object



'Prüfung, ob Textmarke existiert, an der eingefügt werden soll
If Not Bookmarks.Exists("Funktionsprüfung1") Then
MsgBox "Textmarke 'Funktionsprüfung 1' fehlt!"
Exit Sub
End If

If CheckBox1.Value = True Then

'Text aus Autotext einblenden, wenn Checkbox angehakt
Set auttxt1 = ActiveDocument.AttachedTemplate.AutoTextEntries("Funktionsprüfung 1")
auttxt1.Insert where:=Bookmarks("Funktionsprüfung1").Range, RichText:=True

Set auttxt2 = ActiveDocument.AttachedTemplate.AutoTextEntries("Funktionsprüfung2")
auttxt2.Insert where:=Bookmarks("Funktionsprüfung2").Range, RichText:=True


Else
'Text ausblenden,wenn Checkbox abgehakt
ActiveDocument.Bookmarks("Funktionsprüfung1").Range.Select
Selection.Expand unit:=wdTable
Selection.Cells.Delete

ActiveDocument.Bookmarks("Funktionsprüfung2").Range.Select
Selection.Expand unit:=wdTable
Selection.Cells.Delete



End If
End Sub


Zur Info:

Die Protokolle bestehen aus Tabellen.

Ich hoffe ihr könnt mir helfen.
Vielen Dank im Voraus
 
Jedoch bleiben die Kopf-und Fußzeilen der ausgeblendeten Protokolle bestehen.
Ich komme hier mit dem Plural nicht recht zurecht.
Seiten haben so was, ich kann mittels Abschnittswechseln unterschiedliche Kopf/Fußzeilen basteln. Diese anzuspringen ist möglich, um drin rumzubasteln. Aber diese Objekte als solche auszublenden, da habe ich noch nie Energie dran verschwendet. Leeren und Füllen, OK. Aber Ausblenden? Bin gerne lernfähig.

CN8
 
Seitenlayout > Auswahlbereich.

Programmtechnisch lassen sich Grafiken, Linien oder Textfelder relativ einfach fangen. Ob Textmarken klappen weiß ich nicht, vermutlich nicht. Wenn, dann zeigt es der Auswahlbereich auch an.
Code:
Public Sub DeactivateHeaderFooterElements()
    Dim LetterHeader As Word.HeaderFooter
    Dim LetterSection As Word.Section
    Dim LetterShape As Word.Shape
    
    For Each LetterSection In pElement.Sections
        For Each LetterHeader In LetterSection.Headers
            For Each LetterShape In LetterHeader.Shapes
                Select Case LetterShape.Name
                    Case "Straight Connector 11"
                        LetterShape.Visible = msoTrue
                    Case "Gerade Verbindung 1"
                        LetterShape.Visible = msoTrue
                    Case Else
                        LetterShape.Visible = msoFalse
                End Select
            Next LetterShape
        Next LetterHeader
    Next LetterSection
    
End Sub
Den Code setze ich ein, um die Briefkopfelemente auszublenden die schon auf dem Vordruck existieren (BeforePrint Event).
Wobei pElement.Sections das Aktuelle Dokument ist, die Sub ist in einer Klasse implementiert.
 
@morcego: SSehr schickes Stück code. Sag mal, was fällt alles unter die Kategorie .Shapes? Einfacher Text und Felder auch?

Danke und Gruß
Martin
 
Die Unterscheidung läuft nach Inlineshape und Shape. Ein Bild was als "Mit Text in Zeile" definiert ist wird ein InlineShape, sitzt es vor oder hinter dem Text oder ... halt irgendwo, ist es ein Shape.
Ich hatte jetzt nur das Vergnügen mit Linien aus dem Formenkatalog, Textfeldern die frei schweben und positionierten Grafiken.
Felder laufen sicherlich auch als solche, Text ist Text über den .Range.

Wenn man sich mit den Sachen auseinandersetzt um sie zu benutzen, dann braucht es aber auch etwas mehr Arbeit.
1. Ein Template anlegen auf dem dann alle Dokumente basieren.
2. Die Elemente einbauen die in Kopf und Fuß notwendig sind.
3. Im Auswahlbereich schauen wie die Namen sind, die werden im XML-Dokumententeil einfach so von Word durchbenannt.
4. Mit einer For Each Schleife nochmal alle Shapes durchlaufen und sich den Namen ausgeben lassen. Die Namen sind nicht nur völlig frei, sondern auch noch Deutsch und Englisch gemischt (Siehe Codebeispiel Verbindung <> Connector)
5. Dann erst die eigentliche VBA/C# Implementierung welche Elemente verändert werden sollen. Sollen immer alle benutzt werden, spart man sich das Select Case oder eine If-Verzweigung.

6. Wo und wie die Funktion dem Benutzer angeboten wird, als Element im Dokument selbst, ContentControls zB oder im Ribbon. Ribbon ist halt erhöhter Funfaktor. :D
 
Zurück
Oben