VBA, Word 2007, Checkbox aan maar ook uit ...

Status
Niet open voor verdere reacties.

jackfish

Gebruiker
Lid geworden
10 sep 2010
Berichten
297
Ik gebruik selectievakjes op een userform om tekst naar een document te schrijven. Voor de leesbaarheid zou ik graag een derde variabele in het document opnemen die gecombineerde tekst wegschrijft als bv. checkbox1 en checkbox2 geselecteerd is. Alle drie de antwoordmogelijkheden kunnen zo naar het document worden weggeschreven met onderstaande code.

Code:
Private Sub CommandButton1_Click()
  With ActiveDocument
      .Variables("Checkbox1") = IIf(CheckBox1, "De linker hand trilt. ", " ")
      .Variables("Checkbox2") = IIf(CheckBox2, "De rechter hand trilt. ", " ")
      .Variables("Checkbox1en2") = IIf(CheckBox1 * CheckBox2 = 1, "Zowel de linker als de rechter hand trilt. ", " ")
      .Fields.Update
  End With
End Sub

Alleen zou ik dan natuurlijk de tekst van Checkbox1 en Checkbox2 niet in het document willen zien. Tegelijk moet op het userform de checkboxen wel aangevinkt blijven zodat de gebruiker kan zien wat is geselecteerd.

Op welke manier zou mijn probleem op te lossen zijn?
 
Zoiets?
Code:
Dim iCheck As Integer
With ActiveDocument
    If .CheckBox1 Then iCheck = 1
    If .CheckBox2 Then iCheck = iCheck + 2
    Select Case iCheck
        Case 1
            .Variables("Checkbox1") = "De linker hand trilt. "
            .Variables("Checkbox2") = " "
            .Variables("Checkbox1en2") = " "
        Case 2
            .Variables("Checkbox1") = " "
            .Variables("Checkbox2") = "De rechter hand trilt. "
            .Variables("Checkbox1en2") = " "
        Case 3
            .Variables("Checkbox1") = " "
            .Variables("Checkbox2") = " "
            .Variables("Checkbox1en2") = "Zowel de linker als de rechter hand trilt. "
    End Select
    .Fields.Update
End With
 
zonder de punten voor checkbox1 en checkbox2 werkt het perfect. Dank je wel!
Code:
If CheckBox1 Then iCheck = 1
If CheckBox2 Then iCheck = iCheck + 2

Ik kan alleen geen informatie vinden over iCheck, heb je een verwijzing?
 
Laatst bewerkt:
Wanneer ik de code van octafish gebruik bij meerdere checkboxen (bijvoorbeeld ook 3 & 4, 5 & 6), dan neemt de snelheid waarmee de bewerking wordt uitgevoerd flink af. Is dat te voorkomen?
 
Vreemd, nu werkt het goed na het opnieuw starten van de pc.Misschien het geheugen volgelopen?
 
Alternatief:
Je hebt maar 1 variabele nodig

Code:
Activedocument.variables("trilling")=choose(1*checkbox1+2*checkbox2,"De linkerhand trilt","De rechterhand trilt","Beide handen trillen")
 
Het idee begrijp ik en is een prachtige oplossing! Alleen geeft het bij mij de foutmelding ongeldig gebruik van Null. Op msdn lees staat dat je ervoor moet zorgen dat de variabele een geldige waarde moet hebben. Iets trekt VBA dus niet, Ik heb gekeken naar de choose function maar kom er toch niet uit.

Bekijk bijlage Documentvariabele Trilling.zip
 
Als de document variabele niet bestaat, gaat het fout. Of, zoals in het voorbeeldje, de rekensom negatieve waarden oplevert.
Code:
Private Sub CommandButton1_Click()
Dim myVar As Variant
Dim bCheck As Boolean
Dim sResult As String

    For Each myVar In ActiveDocument.Variables
        If myVar.Name = "trilling" Then
            bCheck = True
            Exit For
        End If
    Next
    sResult = GetChoice(Abs(1 * Me.CheckBox1) + Abs(2 * CheckBox2))
    If bCheck = False Then
        ActiveDocument.Variables.Add Name:="trilling", Value:=sResult
    Else
        ActiveDocument.Variables("trilling") = sResult
    End If
End Sub

Code:
Function GetChoice(Ind As String) As String
    GetChoice = Choose(Ind, "De linkerhand trilt", "De rechterhand trilt", "Beide handen trillen")
End Function
 
Kijk eens in de bijlage.

Lees eerst eens in je Word handboek hoe je een veld invoert in een document.
 

Bijlagen

toch stond in het veld 'documentvariabele', terwijl de tekst, voor zover ik weet, 'Docvariable' moet zijn.
 
Boven het veld stond in tekst inderdaad documentvariabele trillingen * 3. Ik heb het nog even nagekeken want ik zou mijzelf wel herkennen in zo een fout :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan