Hallo,
wie kann ich die Anzahl der möglichen Markierungen für eine Checkbox-Gruppe in einem Formular begrenzen?
Ich nutze Word 2003, auf eine Frage gibt es sechs mögliche Antworten (= Checkboxen), es sollen aber maximal drei davon angekreuzt werden. Z. B. sollen alle übrigen Checkboxen bei der dritte Eingabe inaktiv werden. Nimmt man eine Markierung wieder zurück, sollen dann wieder alle aktiv werden.
Vielen Dank!
wie kann ich die Anzahl der möglichen Markierungen für eine
Checkbox-Gruppe in einem Formular begrenzen?
Ich nutze Word 2003, auf eine Frage gibt es sechs mögliche
Antworten (= Checkboxen), es sollen aber maximal drei davon
angekreuzt werden. Z. B. sollen alle übrigen Checkboxen bei
der dritte Eingabe inaktiv werden. Nimmt man eine Markierung
wieder zurück, sollen dann wieder alle aktiv werden.
Hallo Susanne,
Alt+F11, links siehst du „Project(Dokumentname)“, darunter „ThisDocumment“, darauf Doppelklick.
(Wenn du „ThisDocumment“ nicht siehst, klicke auf das „+“ vor „Project(Dokumentname)“)
In das Fenster kopierst du den nachstehenden Code.
Oberhalb des Modulfensters siehst du „(Allgemein)“ mit rechts einem Pfeil nach unten. Klicke auf den Pfeil und du siehst die Namen deiner Checkboxen.
Gemäß diesen Namen im Code alle Zeilen wie diese:
Private Sub CheckBox12_Click()
auf deine Namen abändern
Jetzt kannst du den VB-Editor schließen, Code läuft automatisch.
Probiere es mal in einem neuen Dokument wo du nur 6 Kontrpllkästchen einfügst.
Noch reagiert der Code auf alle Kontrollkästchen im Dokument und achtet nicht auf Gruppen.
Da du in Word viel besser und schneller bist als ich, erstelle bitte mal ein Dokument mit 4 Gruppen a 6 Kontrollkästchen und lade das hoch mit FAQ:2861
Dann schaue ich mal wie ich den Code überrede auf die Gruppenzugehörigkeit zu achten 
Gruß
Reinhard
Option Explicit
'
Private Sub CheckBox1\_Click()
Call Pruef
End Sub
'
Private Sub CheckBox11\_Click()
Call Pruef
End Sub
'
Private Sub CheckBox12\_Click()
Call Pruef
End Sub
'
Private Sub CheckBox13\_Click()
Call Pruef
End Sub
'
Private Sub CheckBox14\_Click()
Call Pruef
End Sub
'
Private Sub CheckBox15\_Click()
Call Pruef
End Sub
'
Sub Pruef()
Dim C As Shape, anz As Integer, Frei As Boolean
For Each C In ActiveDocument.Shapes
anz = anz + IIf(C.OLEFormat.Object.Value, 1, 0)
Next C
If anz
Hallo,
Datei habe ich hochgeladen auf http://www.swhh.de/steuerelemente.doc (mit zwei Gruppen).
Code habe ich eingefügt, kann aber nicht erkennen, dass irgendwas geprüft wird.
Danke vielmals,
Susanne
Datei habe ich hochgeladen auf
http://www.swhh.de/steuerelemente.doc (mit zwei Gruppen).
Code habe ich eingefügt, kann aber nicht erkennen, dass
irgendwas geprüft wird.
Hallo Susanne,
ich hatte es getestet und auch bei dir läuft der Code problemlos durch, leider macht er bei dir nix.
For Each C In ActiveDocument.Shapes
wird bei mir für jede Checkbox durchlaufen, bei dir nicht.
Solange sich hier kein Word-VBA-Wissender einmischt und mitteilt wie man da deine Checkboxen referenziert in Vba, müßen wir halt schauen wie wir das Problem zusammen hinkriegen.
Ich habe zum Testen über Ansicht-Symbolleisten-Steuerelmenttoolbox ein Kontollkästchen ins Dokument gebracht, dann 5mal kopiert.
Wie hast du, Step by Step, deine Kontrollkästchen/Checkboxes erzeugt?
Gruß
Reinhard
Die Checkboxen hatte ich so wie Du eingefügt: Aus der Steuerelemente-Toolbox, dann nur die Eigenschaft „Gruppe“ geändert.
Und stimmt, die Schleifen werden nicht durchlaufen!
Und bei Dir ja? Mit der gleichen Word-Version?
Die Checkboxen hatte ich so wie Du eingefügt: Aus der
Steuerelemente-Toolbox, dann nur die Eigenschaft „Gruppe“
geändert.
Und stimmt, die Schleifen werden nicht durchlaufen!
Und bei Dir ja? Mit der gleichen Word-Version?
Hallo Susanne,
ich habe Word97.
http://www.hostarea.de/server-03/Maerz-3795fc1f6a.mp3
Speichere sie dann und da sie logo keine mp3 ist, benenne sie um in eine .doc und öffne sie mit Word.
(hostarea mag keine docs, warum auch immer)
Bei mir klappt das so wie gewünscht, ab drei angehakten Ciechboxen sind alle anderen disabled, sinds nur noch zwei sind wieder alle enabled.
Mein Problem ist, in Excel-Vba bin ich nicht schlecht, aber Word-Vba, Outlook-Vba, Coreldraw-VBA usw. , gibt da ca. 30 verschiedene VBAs und halt Word-Vba ist eine andere Welt.
Die VB-Grundbefehle kennen alle, da kann ich problemlos die Welten wechseln, aber sie haben alle verschiedene spezielle Objekte die man überall unterschiedlich referenziert=anspricht.
Dadran hänge ich grad fest.
Ein Tipp noch, gehe mal auf den Link hier in der Brettbeschreibung, da ist auch relativ VBA-Code für Word drin verborgen.
Schau da mal nach Checkbox, Kontrollkästchen usw.
Wäre die Seite übersichtlicher würde ich ja selbst danach forschen, aber ich denke mir du hast da mehr Interesse an einer Lösung als ich, also mach du diesen mühseligen Job
)
Dann zeige hier alle gefunden Codes wo Checkbox drin vorkommt. Das hilft mir evtl. sehr weiter und Minuten später hast du die Lösung für dein Problem, oder halt auch nicht wenn es nicht weiterhalf *gg*
Gruß
Reinhard
Eins habe ich rausgefunden: das anzusprechende Objekt ist kein „shape“ sondern „inlineshape“.
Bleibt noch die Frage, wie es für die einzelnen Fragen (=Gruppen) zu trennen ist.
Eins habe ich rausgefunden: das anzusprechende Objekt ist kein
„shape“ sondern „inlineshape“.
Bleibt noch die Frage, wie es für die einzelnen Fragen
(=Gruppen) zu trennen ist.
Hallo Susanne,
ich habe schon bei mehrereren Versuchen in Word-Vba was Sinnvolles zu basteln mitbekommen daß es da wohl Shapes und Inlineshapes gibt.
Auch mit Inlineshape habe ich es beir dir probiert, klappte aber auch nicht.
Aus der Erinnerung weiß ich, ich hatte mal Code gebastelt der erst nicht lief, dann gibt es da einen Befehl mit dem man Shape in Inlineshape oder umgekehrt wandeln kann, dann lief der Code problemlos.
Das mit den Gruppen halte ich für mich für zweitrangig, wenn ich erts mal eine Checkbox „ansprechen“ kann kriege ich auch die Gruppe raus usw.
Gruß
Reinhard
Hallo,
gerade die Gruppierung ist für mich wichtig, da ich die maximale Anzahl der Markierungen ja nicht für das gesamte Dokument, sondern für jede einzelne Frage im Dokument begrenzen will.
Ob „shape“ oder „inlineshape“, das ist zweitrangig, denn - wie ich jetzt herausgefunden habe - unterschieden werden sie nur durch die Einbettung im Text (siehe Steuerelement formatieren - Layout, „mit Text in Zeile“ sind „inlinshapes“, alle anderen „shapes“).
Wie ich nun mit dieser Erkenntnis die Gruppen bestimme - das wüßte ich gerne.
Vielen Dank und Gruß.
gerade die Gruppierung ist für mich wichtig, da ich die
Hallo Susanne,
das ist mir klar.
Trotzdem spielt es für eine Lösung erstmal völlig die zweite Geige.
Ich muß ja erstmal den Bären erlegen um rauszufinden zu welcher Gruppe er gehört.
Was anderes, aber auch wichtig um herauszufinden ob da unterschiedliche Word-versionen dazwischenfunken, hast du meine Beispieldatei getestet, funktionierte das da wie gewünscht?
Übrigens, wieviele Checkboxen gibt es bzw. können es mal werden?
Gruß
Reinhard
Lösung
wie kann ich die Anzahl der möglichen Markierungen für eine
Checkbox-Gruppe in einem Formular begrenzen?
Ich nutze Word 2003, auf eine Frage gibt es sechs mögliche
Antworten (= Checkboxen), es sollen aber maximal drei davon
angekreuzt werden. Z. B. sollen alle übrigen Checkboxen bei
der dritte Eingabe inaktiv werden. Nimmt man eine Markierung
wieder zurück, sollen dann wieder alle aktiv werden.
Hallo Susanne,
bei den Gruppennamen müssen die Namen exakt gleich sein. Du hattest einmal „Frage 2“ anstatt „Frage2“, korrigiere das.
Bei vielen Checkbosen ist das manuell bei allen anchzuprüfen mühsam.
Ggfs schreibe hier eine neue Anfrage wie man die Namen aller Checkboxen samt Gruppennamen auflistet. Die Liste kann man fixer überfliegen.
Desgleichen, wenn du 100 Fragen a 6 Checkboxen hast müßtest du ja 600mal sowas haben im Code:
Private Sub CheckBox4_Click()
Call Pruef(CheckBox4.GroupName)
End Sub
Mit einem makro geht das natürlich durch einen Mausklick diese 600 3zeiler zu erzeugen.
Mit Excel braucht man nichtmal ein Makro dafür.
Achja, du hast InlineShapes. Ich hatte einen winzigen Fehler gemacht sonst wäre die Lösung schon lange fertig:frowning:
Gruß
Reinhard
Option Explicit
'
Private Sub CheckBox1\_Click()
Call Pruef(CheckBox1.GroupName)
End Sub
'
Private Sub CheckBox2\_Click()
Call Pruef(CheckBox2.GroupName)
End Sub
'
Private Sub CheckBox3\_Click()
Call Pruef(CheckBox3.GroupName)
End Sub
'
Private Sub CheckBox4\_Click()
Call Pruef(CheckBox4.GroupName)
End Sub
'
Private Sub CheckBox5\_Click()
Call Pruef(CheckBox5.GroupName)
End Sub
'
Private Sub CheckBox6\_Click()
Call Pruef(CheckBox6.GroupName)
End Sub
'
Private Sub CheckBox7\_Click()
Call Pruef(CheckBox7.GroupName)
End Sub
'
Private Sub CheckBox8\_Click()
Call Pruef(CheckBox8.GroupName)
End Sub
'
Private Sub CheckBox9\_Click()
Call Pruef(CheckBox9.GroupName)
End Sub
'
Private Sub CheckBox10\_Click()
Call Pruef(CheckBox10.GroupName)
End Sub
'
Private Sub CheckBox11\_Click()
Call Pruef(CheckBox11.GroupName)
End Sub
'
Private Sub CheckBox12\_Click()
Call Pruef(CheckBox12.GroupName)
End Sub
'
Sub Pruef(strCB As String)
Dim C As InlineShape, anz As Integer, Frei As Boolean
For Each C In ActiveDocument.InlineShapes
If C.OLEFormat.Object.GroupName = strCB Then
anz = anz + IIf(C.OLEFormat.Object.Value, 1, 0)
End If
Next C
If anz
Klasse!
Danke, nun ist’s perfekt.