Word VBA Userform,有时按名称获取控件对象

时间:2017-10-25 02:02:01

标签: vba checkbox ms-word userform

我有一个userform“myUserForm”,其中包含许多TypeName()为“CheckBox”的控件。我只是讨厌有几十个名为“Private Sub Chk1_Click()”的_Click()例程,所以为了管理_Click()例程的数量,我简化并使它们几乎相同:

Private Sub Chk1_Click()
  ProcessClickFor ("Chk1")
End Sub
Private Sub Chk2_A_Click()
  ProcessClickFor ("Chk2_A")
End Sub
Private Sub Chk3_Z_Click()
  ProcessClickFor ("Chk3_Z")
End Sub

ProcessClickFor()可以完成大部分工作。

Sub ProcessClickFor(anyCheckBox As String)
     Dim cbControl As Object
     Set cbControl = ControlByName(anyCheckBox)
     If cbControl.Value Then
        cbControl.Value = True
     End If
End Sub

稍后,当我想使用任何控件时,我可以按名称获取Control对象,例如:

  Dim aControl As Object
  Set aControl = ControlByName(“Chk3”)
  MsgBox  “The control named “ & cbControl.Name & “ is “ & cbControl.Visible

Function ControlByName(sName) As Object
    Dim objectified As Object
    For Each objectified In myUserForm.Controls
        If objectified.Name = sName Then
            Set ControlByName = objectified
            Exit Function
        End If
    Next objectified
End Function

这很好,几乎,但是在每次时间myUserForm 上的相同四个控件上都会失败。

失败“模式”是ControlByName()似乎成功返回,但第一次使用返回的控件(例如我的MsgBox)会出错:

"Run-time error '91': Object variable or With block variable not set".

我验证了定义的控件名称的拼写与我的_Click()例程中的名称匹配。数十个类似设计的CheckBox控件完美运行。它可能与CheckBox名称的长度或CheckBox名称中的“_”字符数有关吗? CheckBox名称中是否存在损坏的字符?你能想到让我尝试的其他事情吗?

0 个答案:

没有答案