Vba 为UserForm控件名生成具有For Next循环值的字符串
我正在努力建立价值观Vba 为UserForm控件名生成具有For Next循环值的字符串,vba,excel,for-loop,userform,Vba,Excel,For Loop,Userform,我正在努力建立价值观 If UserForm1.p1OptionButton.Value = True 其中p1OptionButton中的1是For Next循环计数器的值,但无论我如何尝试构造它,都会出现错误。如果我使用 Dim iPart As Integer For iPart = 1 to 6 If "UserForm1.p" & iPart & "OptionButton.Value" = True .... blah blah blah rest of the c
If UserForm1.p1OptionButton.Value = True
其中p1OptionButton中的1是For Next循环计数器的值,但无论我如何尝试构造它,都会出现错误。如果我使用
Dim iPart As Integer
For iPart = 1 to 6
If "UserForm1.p" & iPart & "OptionButton.Value" = True
.... blah blah blah rest of the code
Next iPart
我得到这个错误:
运行时错误13类型不匹配
如果我在字符串的其他部分省略“out”,它也不起作用
感谢您的帮助。我相信您正在尝试将字符串与布尔值进行比较,因此它不会以您希望的方式工作。如果您希望它工作得更好,您可以做一些类似的事情,只需查看每个可能的值(即UserForm1.p1OptionButton.value、UserForm1.p2OptionButton.value等)我认为您试图将字符串与布尔值进行比较,因此它不会按照您希望的方式工作。如果您希望它工作得更好,您可以做一些类似的事情,只需查看每个可能的值(即UserForm1.p1OptionButton.value、UserForm1.p2OptionButton.value等)我已经很久没有做过VBA了,所以可能有点生锈:) 您得到的错误是因为您将字符串与布尔值进行比较,因此类型不匹配 您可以尝试使用以下代码动态访问控件:
Forms("UserForm1").Controls("p" & iPart & "OptionButton").Value = True
我已经很久没有做过VBA了,所以可能有点生疏:) 您得到的错误是因为您将字符串与布尔值进行比较,因此类型不匹配 您可以尝试使用以下代码动态访问控件:
Forms("UserForm1").Controls("p" & iPart & "OptionButton").Value = True
例如,假设您的表单上有6个
OptionButton
s和一个CommandButton
,则您可以根据下面的代码示例迭代这些选项。如果您将一个变量设置为OptionButton
,然后将其中一个表单控件
分配给该变量,则可以访问其属性,例如Name
d值
等非常容易
Option Explicit
Private Sub CommandButton1_Click()
Dim opt As MSForms.OptionButton
Dim i As Long
For i = 1 To 6
Set opt = UserForm1.Controls("p" & i & "OptionButton")
If opt.Value = True Then
MsgBox opt.Name & ":" & opt.Value
End If
Next i
End Sub
例如,假设您的表单上有6个
OptionButton
s和一个CommandButton
,则您可以根据下面的代码示例迭代这些选项。如果您将一个变量设置为OptionButton
,然后将其中一个表单控件
分配给该变量,则可以访问其属性,例如Name
d值
等非常容易
Option Explicit
Private Sub CommandButton1_Click()
Dim opt As MSForms.OptionButton
Dim i As Long
For i = 1 To 6
Set opt = UserForm1.Controls("p" & i & "OptionButton")
If opt.Value = True Then
MsgBox opt.Name & ":" & opt.Value
End If
Next i
End Sub
这是正确的方法,我对其进行了相应的改进,但值得注意的是,尽管控件集合是基于0的,但实际上您是根据其名称而不是序号选择opt。在您的示例中,当I=0时,则“UserForm1.controls”(“p”&I+1&“OptionButton”)的计算结果为“UserForm1.controls”(“p1OptionButton”)'因此,您不妨通过使用'For i=1到6'和'UserForm1.Controls(“p”&i&“OptionButton”)来简化您的生活。'“.@Winterknell-是的,你当然是对的。我会更新这个示例。这是正确的方法,我也相应地对其进行了升级,但值得注意的是,尽管控件集合是基于0的,但实际上您是根据其名称而不是序号来选择opt。在您的示例中,当I=0时,则选择“UserForm1.controls”(“p”&I+1&“OptionButton”)'的计算结果为'UserForm1.Controls(“p1OptionButton”)',因此您不妨通过使用'For i=1到6'和'UserForm1.Controls(“p”&i&“OptionButton”)'来简化您的生活。@Winterknell-当然,您是对的。我将更新示例。