Search code examples
vbacheckboxms-wordword-contentcontrol

How to use UserForm CheckBox to change Control Content CheckBox in Word Document?


I created an UserForm with a checkbox 'cbxYes' and a Content Control checkbox 'docCbx' in the Word document. I want to be to check off the checkbox 'cbxYes' in UserForm that then changes the Content Control checkbox in the Word document. So the input is from the UserForm checkbox and the output is the Content Control checkbox.

I have tried multiple searches on how to do this, but I could not find exactly what I needed. Most of the searches were related to Excel. And honestly, I don't know what I'm doing. Please. The correct help is greatly appreciated.

Private Sub cbxYes_Click()

Dim oCC As ContentControl

If cbxYes.value = True Then
   cbxYes.value = "True"
   ActiveDocument.docCbx_Yes.value = True
Else
   cbxYes.value = "False"
   ActiveDocument.docCbx_Yes.value = False
End If

End Sub

The error I got was:

run-time error '438': Object doesn't support this property or method.


Solution

  • The code shown in the question would be for ActiveX checkboxes, rather than content controls. (Just to make things really complicated, Word also has checkbox form fields that need yet another code syntax.)

    There's no way to refer directly to a content control name via the Document object - it must be done over the ContentControls collection. Content controls can be assigned a Title and/or a Tag in the Properties dialog box.

    enter image description here

    More than one content control can have the same name or title, which makes the code a bit complicated. Querying Document.ContentControls("Title") returns a collection (all the content controls with that title).

    If you know which one, then it's possible to pick it up directly (rather than working through a collection) using the Item method, specifying that it's the n content control (the index in the order of content controls). This is usually used when one knows there's only the one.

    Note, please, also, that in order to "check" or "uncheck" a content control checkbox the Checked property should be use. So:

    Private Sub cbxYes_Click()
    
    Dim oCC As ContentControl
    Set oCC = ActiveDocument.SelectContentControlsByTitle("docCbx").Item(1)
    
    If cbxYes.value = True Then
       'cbxYes.value = "True" not needed
       occ.Checked = True
    Else
       'cbxYes.value = "False" not needed
       oCC.Checked = False
    End If
    
    End Sub