Selectievakje koppelen aan reeks andere selectievakjes

Status
Niet open voor verdere reacties.

gemuseman

Gebruiker
Lid geworden
7 jan 2013
Berichten
24
Goedendag,

Ik wil graag in een formulier (Word 2003) selectievakjes aan elkaar koppelen. Als het antwoord op de vraag "nee" is, dan kan een reeks van 5 ook op "nee" springen.

Heb geprobeerd een macro te schrijven en die te koppelen aan het selectievak maar helaas lukt dat niet.

Selectievakjes zijn gemaakt met werkbalk "formulieren".

Alvast bedankt voor de hulp.
 
Om te voorkomen dat ik een hoop tijd steek in een verkeerd voorbeeldje, is het wel zo makkelijk als je zelf even een voorbeeldje post. Kunnen we gelijk controleren wat je zelf gedaan hebt, en of/hoe dat beter kan.
 
Hierbij een sterk vereenvoudigd bestand. Het originele formulier bestaat uit 5 pagina's met formuliervelden.

Bekijk bijlage selectievakjes.docx

Als selectievakje 1 ingeschakeld is dan wil ik dat de andere 3 vakjes ook ingeschakeld worden.

Onderstaande macro wil ik toewijzen aan selectievakje 1, maar de macro werkt niet.

Sub selectievakje()
With ActiveDocument
.selectievakje2.Value = True
.selectievakje3.Value = True
End With
End Sub
 
Weet je zeker dat je een Word 2003 bestand aan het maken bent? Je extensie klopt niet.
 
Hier daarom een ècht 2003 voorbeeldje. Je zult zien dat je eigen code een beetje kort door de bocht was :)
 

Bijlagen

Dank voor je reactie. Ik gebruik het bestand op mijn werk waar ik word 2003 heb. Het bijgevoegde bestand was thuis gemaakt op office 2010.

Ik zie dat je macro werkt. Ga hem even bestuderen. Je hoort nog van me terug.

Gerard.
 
Beste Michel,

Ik probeer je macro te doorgronden maar kom er niet helemaal uit. Daarom lukt het me niet om hem te kopiëren naar mijn bestand.
Zie de macro hieronder en een gedeelte van het bestand waar hij in moet komen in de bijlage. Bekijk bijlage Aanmeldformulier transferbureau helpmij.doc

Volgens mij zegt de macro: Als de naam van het selectievakje groter is dan selectievakje 16 dan krijgt hij de waarde van selectievakje 16.

Sub Selectievakje()
Dim chkField As FormField

For Each chkField In ActiveDocument.FormFields
If chkField.Type = wdFieldFormCheckBox Then
If Right(chkField.Name, 1) > 16 Then
chkField.CheckBox.Value = ActiveDocument.FormFields("Selectievakje16").CheckBox.Value
End If

End If
Next
ActiveDocument.FormFields("Text40").Select

End Sub
 
Ik doe een check op het laatste teken van de naam van het selectievakje. Dat werkt in mijn voorbeeldje prima, want ik heb niet meer dan 10 selectievakjes. Heb je er 11 of meer, dan moet je op de laatste 2 tekens controleren. Er staat overigens: Right(chkField.Name, 1) > 1, en niet >16, want dan zou de macro niet werken. Maar verder klopt je verhaal. Vink je checkbox 1 aan of uit, dan krijgen 2-4 de waarden van checkbox 1.
 
Dank.

Is het ook mogelijk direct te verwijzen naar een reeks vakjes? Ik heb er wel meer dan 60 in mijn document.
Domme vraag wellicht, maar hoe weet die macro nu dat je het selectievakje aangevinkt hebt. Je hebt volgens mij de macro namelijk niet gekoppeld aan het selectievakje.

Alvast bedankt voor je antwoord.

Gerard.
 
Direct verwijzen, wat bedoel je daar mee? De directe verwijzing heb je zelf al in post #7 gezet. Dus dat kan absoluut.
De macro zit overigens in de actie <Kiezen van veld> van Selectievakje1, want hij moet natuurlijk wel getriggerd worden.
 
Erg bedankt voor je hulp. Maar ik heb een heel nieuwe opzet gemaakt.
Plotseling zag ik het licht.

Door in plaats van selectievakjes Optionbuttons te gebruiken.

Op deze manier werkt het.

Als ik het selectievakje inschakel dan springen alle buttons op 0.

Bekijk bijlage Aanmeldformulier transferbureau 29-7-13 helpmij.doc


Wat ik nu nog zou willen: als een andere keus gemaakt wordt dan 0, dan moet het selectievakje uitspringen.

Dat lukt door een macro bij elke optionbutton te schrijven. Maar omdat ik behoorlijk wat option buttons heb is dat nogal wat werk.

Is er een slimmere manier om dit te regelen?
 
Bondig programmeren is dan denk ik de volgende stap ?
Code:
Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then ActiveDocument.OptionButton0.Value = True
End Sub
Of dit bondiger kan, mag iemand anders uitzoeken ;)
Code:
    For Each oShape In ActiveDocument.InlineShapes
        With oShape.OLEFormat
            If .ProgID = "Forms.OptionButton.1" Then
                With .Object
                    If .GroupName = "mobiliteit" Then
                        i = i + 1
                        If i > 1 And .Value = True Then ActiveDocument.CheckBox1.Value = False
                    End If
                End With
            End If
        End With
    Next
End Sub
Ik heb overigens de groepsnaam ingekort zonder spatie. Is een stuk veiliger (geen spaties gebruiken).
 
Laatst bewerkt:
Neemt overigens niet weg dat je nog steeds bij elk optierondje een opdracht moet maken die de check uitvoert, dus of je er erg veel mee opschiet.... Lijkt mij een stuk simpeler om een formulier te maken die e.e.a. uitvoert, want dat is een stuk makkelijker te bouwen.
Code:
Private Sub OptionButton1_Click()
    CheckOpt
End Sub

Code:
Private Sub OptionButton2_Click()
    CheckOpt
End Sub
etc.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan