使用字符串设置 VBA 表单对象
Setting a VBA form object using a string
你好,
我正在尝试设置一个日历表单,用户可以从中 select 一个日期(默认显示当前月份)。该表单包含 42 个命令按钮(我保留了默认名称,即 CommandButton1),我正在设置日期编号。
目前每个按钮都有一段冗长的代码(我使用 Excel 生成它而不是全部输入)如果按钮在有问题的月份如下所示:
NewDate.CommandButton1.Caption = Format(DATlngFirstMonth - DATintDayNumFirst + DATintX, "dd")
If DATintX < DATintDayNumFirst Then
With NewDate.CommandButton1
.Locked = True
.Visible = DATbooShowExtraDays
.ForeColor = RGB(150, 150, 150)
End With
Else
With NewDate.CommandButton1
.Locked = False
.Visible = True
.ForeColor = RGB(0, 0, 0)
End With
End If
我知道我可以通过以下方式引用命令按钮:
Dim objCommandButton As Object
Set objCommandButton = NewDate.CommandButton1
..这使代码更整洁了一些。但我想做的是将命令按钮作为字符串引用,这样我就可以遍历所有 42 个,即
Dim n as integer
n = 1
Do Until n > 42
Set objCommandButton = NewDate.CommandButton & n
'Some operations
n = n + 1
Loop
非常感谢您的帮助。
这是在活动 sheet 上迭代 ActiveX 控件的代码:
Sub IterateOverActiveXControlsByName()
Dim x As Integer
Dim oleObjs As OLEObjects
Dim ctrl As MSForms.CommandButton
Set oleObjs = ActiveSheet.OLEObjects
For x = 1 To 10
Set ctrl = oleObjs("CommandButton" & x).Object
Next
End Sub
您可以遍历窗体的所有控件。尝试
Sub LoopButtons()
Dim it As Object
For Each it In NewDate.Controls
Debug.Print it.Name
Next it
End Sub
然后你可以用条件表达式(if ... then)代替 Debug.Print 或其他任何东西。例如
If Instr(it.Name, "CommandButton") Then
'do your code
end if
你好,
我正在尝试设置一个日历表单,用户可以从中 select 一个日期(默认显示当前月份)。该表单包含 42 个命令按钮(我保留了默认名称,即 CommandButton1),我正在设置日期编号。
目前每个按钮都有一段冗长的代码(我使用 Excel 生成它而不是全部输入)如果按钮在有问题的月份如下所示:
NewDate.CommandButton1.Caption = Format(DATlngFirstMonth - DATintDayNumFirst + DATintX, "dd")
If DATintX < DATintDayNumFirst Then
With NewDate.CommandButton1
.Locked = True
.Visible = DATbooShowExtraDays
.ForeColor = RGB(150, 150, 150)
End With
Else
With NewDate.CommandButton1
.Locked = False
.Visible = True
.ForeColor = RGB(0, 0, 0)
End With
End If
我知道我可以通过以下方式引用命令按钮:
Dim objCommandButton As Object
Set objCommandButton = NewDate.CommandButton1
..这使代码更整洁了一些。但我想做的是将命令按钮作为字符串引用,这样我就可以遍历所有 42 个,即
Dim n as integer
n = 1
Do Until n > 42
Set objCommandButton = NewDate.CommandButton & n
'Some operations
n = n + 1
Loop
非常感谢您的帮助。
这是在活动 sheet 上迭代 ActiveX 控件的代码:
Sub IterateOverActiveXControlsByName()
Dim x As Integer
Dim oleObjs As OLEObjects
Dim ctrl As MSForms.CommandButton
Set oleObjs = ActiveSheet.OLEObjects
For x = 1 To 10
Set ctrl = oleObjs("CommandButton" & x).Object
Next
End Sub
您可以遍历窗体的所有控件。尝试
Sub LoopButtons()
Dim it As Object
For Each it In NewDate.Controls
Debug.Print it.Name
Next it
End Sub
然后你可以用条件表达式(if ... then)代替 Debug.Print 或其他任何东西。例如
If Instr(it.Name, "CommandButton") Then
'do your code
end if