VBA: Word-Tabelle ausblenden

Ausgangssituatio: Eine Worddatei mit vier Tabellen. Ein Kontrollkästchen befindet sich in Tabelle1.

Ziel: Ausblenden bzw. einblenden der vierten Tabelle in Abhängigkeit von dem Kontrollkästchen.

Dazu habe ich folgendes Makro geschrieben:

ActiveDocument.Unprotect
If ActiveDocument.FormFields(„Proto“).Result = True Then ActiveDocument.Tables(ActiveDocument.Tables.Count).Range.Font.Hidden = False
Else ActiveDocument.Tables(ActiveDocument.Tables.Count).Rows(1).Range.Font.Hidden = Ture
End If
Call ActiveDocument.Protect(wdAllowOnlyFormFields)

Beim Kontrollkästchen habe ich diese Makro als Ereignis eingetragen. Aber es funktioniert nicht.
Da habe ich dann ein Haltepunkt in das Makro gemacht und dabei ist mir aufgefallen, dass das Makro gar nicht immer ausgeführt wird, wenn ich es will.
Ich will, dass das Makro immer ausgeführt wird, wenn sich der Wert des Kontrollkästchen ändert.

Kann man noch auf eine andere Art und Weise auf Events von Kontrollkästchen reagieren?
Oder was mache ich falsch?

MfG benny

p.s.: Manchmal kommt es auch vor, dass ich das Kontrollkästchen anklicke er scheibar etwas macht, dann aber den Haken aus den Kontrollkästchen wieder entfernt. Der obige Code ist der gesamte Code. Mehr gibt es nicht.

das Problem aus dem p.s. habe ich schon behoben. Musste der Protect-Methode noch True für noReset übergeben.

Das Problem bleibt aber, dass er nicht jedesmal beim Zustandwechsel das Makro ausgeführt, sondern nur, wenn ich von außerhalb auf das Kästchen klicke. Danach kann ich so oft klicken wie ich will, es passiert nichts. Erst wenn ich ein anderes Kästchen oder Feld anklicke und dann wieder das besagte Kästchen anklicke wird das Makro ausgeführt…
ich hoffe man versteht micht.

Hallo Benny,

Dazu habe ich folgendes Makro geschrieben:

benutze bitte nicht code sondern pre.

Und kopiere den kompletten Code hier rein.
Hier den Code manuell reinschreiben bringt nix, sieht man ja an „Ture“

Was mich auf den ersten Blick stark irritiert ist dieses
„.Font.Hidden=True/False“
Aber okay, vielleicht kann man damit in Word eine Tabelle ausblenden.
Auch in Unkenntnis von Word hab ich da so meine Zweifel.

Irgendwas in der Art:
.Table(4).Hidden=True
oder
.Table(4).Visible=False
hätte mich nicht irritiert.

Kann man noch auf eine andere Art und Weise auf Events von
Kontrollkästchen reagieren?

K.A. Aber wozu? Das Kontrollkästchen wird geändert und dein Code gestartet, was willste mehr?

Gruß
Reinhard

Moin, Blietzau,

Beim Kontrollkästchen habe ich diese Makro als Ereignis
eingetragen. Aber es funktioniert nicht.

schau Dir mal den Code an, da findest Du im linken Dropdown die CheckBox1. Zu der suchst Du im rechten Dropdown das passende Ereignis CheckBox1_ Change , das klickst Du an und erhältst

 Private Sub CheckBox1\_Change()

 End Sub

Dort hinein schreibst Du das, was bei einer Änderung passieren soll.

Gruß Ralf

Es hadelt sich um ein Kontrollkästchen in dem Worddokument und nicht auf einer UserForm.

Ich will, dass der Code bei jeden Zustandswechsel ausgeführt wird. Das ist derzeit nicht der Fall und verwirrt somit den User, der das Makro nutzen soll.

Es hadelt sich um ein Kontrollkästchen in dem Worddokument und
nicht auf einer UserForm.

Hallo Grußloser,

spielt bei einer Checkbox keine Rolle für den Code, er muß dann nur in ein anderes Modul.

Um welche Wordversion geht es, bitte immer angeben.

Welches Kontrollkästchen ist es, ein ActiveX- oder ein Formularelement?

Ich bat darum daß du den ganzen Code zeigst.

Gruß
Reinhard

Moin, Blietzau,

Es hadelt sich um ein Kontrollkästchen in dem Worddokument und
nicht auf einer UserForm.

darauf kommt es nicht an. Im Entwurfsmodus rechte Maustaste auf Checkbox, dort „Code anzeigen“ wählen, Rest wie schon gesagt.

Ich hab’s gerade mit Office 2000 nachgespielt (Simpelfassung Msgbox Checkbox1.Value) , also muss es bei Dir auch klappen.

Gruß Ralf

Das oben ist der gesamte Code. Mehr gab es nicht. Nur diese eine Funktion. Mittlerweise habe ich aber auch noch etwas hinzugefügt. Hier nochmal alles etwas schöner Formatiert:

Public Sub check()
 ActiveDocument.Unprotect
 If ActiveDocument.FormFields("Proto").Result = True Then
 ActiveDocument.Tables.Item(ActiveDocument.Tables.Count).Range.Font.Hidden = False
 ActiveDocument.Sections(ActiveDocument.Sections.Count).Headers(wdHeaderFooterPrimary).Range.Font.Hidden = False
 ActiveDocument.Sections(ActiveDocument.Sections.Count).Footers(wdHeaderFooterPrimary).Range.Font.Hidden = False
 Else
 ActiveDocument.Tables.Item(ActiveDocument.Tables.Count).Rows(1).Range.Font.Hidden = True
 ActiveDocument.Sections(ActiveDocument.Sections.Count).Headers(wdHeaderFooterPrimary).Range.Font.Hidden = True
 ActiveDocument.Sections(ActiveDocument.Sections.Count).Footers(wdHeaderFooterPrimary).Range.Font.Hidden = True
 End If
 ActiveDocument.GoTo What:=wdGoToBookmark, Name:="next"
 Call ActiveDocument.Protect(wdAllowOnlyFormFields, True)
End Sub

Es handelt sich um ein „Kontrollkästchen-Formularfeld“, welches über die Symbolleiste „Formular“ hinzugefügt wurde. Es handelt sich um Version MS Office Word 2003 SP2.

Und wie gesagt. Der Code wird nicht bei jeden Zustandswechsel ausgeführt. Das ist das Problem.

ach und wieder den gruß vergessen

MfG
benny :wink:

Hallo Benny,

Das oben ist der gesamte Code. Mehr gab es nicht. Nur diese
eine Funktion. Mittlerweise habe ich aber auch noch etwas
hinzugefügt. Hier nochmal alles etwas schöner Formatiert:

na, klappt doch. Erst aufgrund deiner jetzt nachgelieferten Informationen weiß man jetzt was bei dir vorliegt.

Dummerweise ist Word nicht so mein Ding, ich hab jetzt auch so ein Feld eingefügt, steht jetzt im Dokument und ist grau gefärbt.
Ich muß jetzt erstmal schauen wie ich da überhaupt einen Haken reinbringe, wahrscheinlich wieder so eine Tastenkombination mit F9 oder sowas *seufz*

Wenn ich doppelt draufklicke kann ich makros zuweisen für „Ereignis“ und „Beenden“, hab ich gemacht. Bringt irgendwie nix :frowning:

Okay, ich vertrau mal auf Ralf, daß er so Banalitäten in Word weiß und dir weiterhilft.

Wenn ich diese Anfangsschwierigkeiten überwunden hätte würde ich dann anfangs der Prozedur einen haltepunkt setzen, dann den Code weiter mit F8 abgehen.

Wie wärs eigentlich, du probierst mal ein Kontrollkästchen aus der Symbolleiste Steuerelementtoolbox? Das sind die ActiveX-Elemente. Ich glaub damit käm ich besser klar.
Dann könntest du auch mehr davon/damit anfangen was Ralf sagte.

Und grundsätzlich, sowas wie Protect würde ich immer erst weglassen solange bis der Restcode noch nicht funktioniert.
Erst wenn der Restcode zuverlässig funktioniert würde ich das mit unprotect/protect codieren.

Gruß
Reinhard

Danke für die Hilfe.

Man muss das Dokument schützen um die Kontrolkästchen nutzen zu können. Um aber den Text auszublenden darf das Dokument nicht geschützt sein. Daher muss ich den Schutz raus nehmen und wieder einfügen.

Das mit den Haltepunkten habe ich gemacht. Ergebnis ist, dass die Prozedur nur ausgeführt wird, wenn das Kontrolkästchen den Fokus bekommt oder verliert. Wenn ich nun das Kästchen mehrmals anklicke und so den Zustand ändere passiert nichts. Wäre an sich nicht schlimm, wenn nur ich das Formular nutzen müsste. Es muss aber auch von anderen genutzt werden und diese wäre damit leider schon überfordert und verwirrt.

Das ActiveX-Steuerelement ist auf Grund des Designs schwierig. Das ganze soll später ausgedruckt werden.

MfG
benny