Select 带计数器的变量对象

Select variable object with counter

背景:
我在使用标准化名称的用户窗体中有一组对象(对于此示例列表框对象),我想使用计数器循环动态重命名它们。


问题:
我还没有想出我所问的是否可行的方法,但是,我想确认一下。 解决方法:
到目前为止还没有,就像我说的(参考上图)我需要一种方法来设置 for 循环中对象的值,像这样:

For CounterItems = 1 To 18 'Hours in Template
ListBox_Time(CounterItems).Value="Dummy" & CounterItems
Next CounterHours

但是,我不知道如何做到这一点(或者是否可以实现)。
问题:
有什么方法可以使用指示物施放variable/object吗?

我像对待他们一样对待他们 Shapes 并测试他们的预定义 Names:

Sub ShapeRenamer()
    Dim s As Shape
    For Each s In ActiveSheet.Shapes
        If s.Name = "List Box 6" Then s.Name = "Sixth"
    Next s
End Sub

之前:

及之后:

您可以更新它以检查您的用户表单中的 Shapes

您也可以使用索引计数器执行此操作。

与 UserForm 上的 ListBox 控件一起使用

如果您只想按编号更改某些 ListBox 控件:

Public Sub ListBoxNameChange()
    Dim ctrl As Control
    Dim ctrlName As String, ctrlNum As Integer

    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "ListBox" Then
            ctrlName = ctrl.Name
            ctrlNum = CInt(Replace(ctrlName, "ListBox_Time", "")) 
            If ctrlNum > 0 And ctrlNum < 19 Then
                ctrl.AddItem "Dummy" & ctrlNum, 0
            End If
        End If
    Next ctrl
End Sub

如果要更改所有 ListBox 控件:

Public Sub ListBoxNameChange2()
    Dim ctrl As Control
    Dim ctrlName As String

    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "ListBox" Then _
            ctrl.AddItem "Dummy" & Replace(ctrl.Name, "ListBox_Time", ""), 0
    Next ctrl
End Sub

不,用户窗体正在使用时您不能编辑名称,您会得到 error 382

你想做的是这个

Option Explicit

Sub test()
    Dim myForm As UserForm
    Set myForm = UserForm1
    Dim myCtrl As Control
    Dim i As Long
    Dim myCount As Long
    myCount = 1
        For Each myCtrl In myForm.Controls
            If TypeName(myCtrl) = "ListBox" Then
                myCtrl.Name = "Dummy" & myCount 'error
                myCount = myCount + 1
            End If
        Next
End Sub

但是当您尝试写入名称 属性 时会出错。您可以打印名称或设置其他属性,但据我所知这不是您可以做的事情。