Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA以编程方式更改对象名称_Vba_Ms Access_Controls - Fatal编程技术网

VBA以编程方式更改对象名称

VBA以编程方式更改对象名称,vba,ms-access,controls,Vba,Ms Access,Controls,我创建了一个日期选择器,允许您选择多个日期,并切换它们,这样就没有人可以在这些天预订任何东西 为了做到这一点,我有31个切换按钮和一个月选择器。当您选择月份时,31个按钮中的每一个都必须更新,并从DLookup获取值(打开或关闭) 目前,我已经在月份选择器的更新事件中得到了这方面的代码作为一个长列表 Private Sub cmbMonth_AfterUpdate() If IsNull(Me.cmbMonth) Then GoTo Subexit Else

我创建了一个日期选择器,允许您选择多个日期,并切换它们,这样就没有人可以在这些天预订任何东西

为了做到这一点,我有31个切换按钮和一个月选择器。当您选择月份时,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)
etc-切换至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
似乎没有什么帮助。

您需要在初始化时将对象存储在全局集合中,例如:

全局集合声明

初始化-在集合中存储对象

循环调用


您可以使用表单的
控件
集合,并在循环时检查每个控件的类型。您正在查找
ActogleButton
s

Dim cntrl As Control
For Each cntrl In Me.Controls
    If cntrl.ControlType = acToggleButton Then

        Update_toggle cntrl

    End If
Next

在循环中,您可以将控件的名称派生为
“Toggle”&I
。因此,您可以通过在表单的
控件
集合中按名称引用相应的控件对象来确定目标

”表示1=1到32
对于I=1到31
调用更新切换(Me.Controls(“切换”&I))
接下来我

据我所知,以编程方式编辑控件名称是不可能的。要实现这一点,必须在VBA编辑器中。
只有标题可以用代码编辑。

在这种情况下,什么是
Me
?我个人把舞台留给了RubberDuck,他的解决方案更有效;这就是你一直在寻找的答案。显然,当表单包含其他不应该进入循环的切换按钮时,不要忘记管理额外的检查。
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
Dim cntrl As Control
For Each cntrl In Me.Controls
    If cntrl.ControlType = acToggleButton Then

        Update_toggle cntrl

    End If
Next