VBA 以编程方式更改对象名称
VBA Programmatically change object name
我创建了一个日期选择器,它允许您 select 多个日期,并切换它们,这样在那些日子里没有人可以预订任何东西。
为了做到这一点,我有 31 个切换按钮,一个月 select 或者。当你 select 月份时,31 个按钮中的每一个都必须更新,并从 DLookup
中获取值(打开或或)。
目前,我在月份选择器的更新事件中得到了一个长列表的代码
Private Sub cmbMonth_AfterUpdate()
If IsNull(Me.cmbMonth) Then
GoTo Subexit
Else
Imonth = CInt(Me.cmbMonth)
End If
Call Update_toggle(Me.Toggle1)
Call Update_toggle(Me.Toggle2)
Call Update_toggle(Me.Toggle3)
Call Update_toggle(Me.Toggle4)
等 - 最多切换 31。
有没有办法用循环来做到这一点?
我尝试了以下方法:
Dim toggle as Togglebutton
Dim I as integer
Dim strTogglename as String
set toggle = new togglebutton
I = 1
for 1 = 1 to 32
strtogglename = "Me.Toggle" & I
set toggle.name = strtogglename
Call Update_toggle(Toggle)
next I
但我无法让它工作。玩弄 byref
和 byval
似乎没有帮助。
您需要在初始化时将对象存储在全局集合中,例如:
全局集合声明
Dim allToggles As Collection
初始化 - 在集合中存储对象
Set allToggles = New Collection
With allToggles
.Add Me.Toggle1
.Add Me.Toggle2
'...
.Add Me.Toggle31
End With
循环调用
for I = 1 to 32
Update_toggle allToggles(I)
next I
您可以使用表单的 Controls
集合并在循环时检查每个控件的类型。您正在寻找 acToggleButton
s.
Dim cntrl As Control
For Each cntrl In Me.Controls
If cntrl.ControlType = acToggleButton Then
Update_toggle cntrl
End If
Next
在循环中,您可以将控件的名称派生为 "Toggle" & I
。因此,您可以通过在表单的 Controls
集合中按名称引用该项目来定位相应的控件 object。
'for 1 = 1 to 32
For I = 1 to 31
Call Update_toggle(Me.Controls("Toggle" & I))
Next I
据我所知,不可能以编程方式编辑控件的名称。为此,必须在 VBA 编辑器中。
只能在代码中编辑标题。
我创建了一个日期选择器,它允许您 select 多个日期,并切换它们,这样在那些日子里没有人可以预订任何东西。
为了做到这一点,我有 31 个切换按钮,一个月 select 或者。当你 select 月份时,31 个按钮中的每一个都必须更新,并从 DLookup
中获取值(打开或或)。
目前,我在月份选择器的更新事件中得到了一个长列表的代码
Private Sub cmbMonth_AfterUpdate()
If IsNull(Me.cmbMonth) Then
GoTo Subexit
Else
Imonth = CInt(Me.cmbMonth)
End If
Call Update_toggle(Me.Toggle1)
Call Update_toggle(Me.Toggle2)
Call Update_toggle(Me.Toggle3)
Call Update_toggle(Me.Toggle4)
等 - 最多切换 31。
有没有办法用循环来做到这一点?
我尝试了以下方法:
Dim toggle as Togglebutton
Dim I as integer
Dim strTogglename as String
set toggle = new togglebutton
I = 1
for 1 = 1 to 32
strtogglename = "Me.Toggle" & I
set toggle.name = strtogglename
Call Update_toggle(Toggle)
next I
但我无法让它工作。玩弄 byref
和 byval
似乎没有帮助。
您需要在初始化时将对象存储在全局集合中,例如:
全局集合声明
Dim allToggles As Collection
初始化 - 在集合中存储对象
Set allToggles = New Collection
With allToggles
.Add Me.Toggle1
.Add Me.Toggle2
'...
.Add Me.Toggle31
End With
循环调用
for I = 1 to 32
Update_toggle allToggles(I)
next I
您可以使用表单的 Controls
集合并在循环时检查每个控件的类型。您正在寻找 acToggleButton
s.
Dim cntrl As Control
For Each cntrl In Me.Controls
If cntrl.ControlType = acToggleButton Then
Update_toggle cntrl
End If
Next
在循环中,您可以将控件的名称派生为 "Toggle" & I
。因此,您可以通过在表单的 Controls
集合中按名称引用该项目来定位相应的控件 object。
'for 1 = 1 to 32
For I = 1 to 31
Call Update_toggle(Me.Controls("Toggle" & I))
Next I
据我所知,不可能以编程方式编辑控件的名称。为此,必须在 VBA 编辑器中。 只能在代码中编辑标题。