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
但是当您尝试写入名称 属性 时会出错。您可以打印名称或设置其他属性,但据我所知这不是您可以做的事情。
背景:
我在使用标准化名称的用户窗体中有一组对象(对于此示例列表框对象),我想使用计数器循环动态重命名它们。
问题:
我还没有想出我所问的是否可行的方法,但是,我想确认一下。
解决方法:
到目前为止还没有,就像我说的(参考上图)我需要一种方法来设置 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
但是当您尝试写入名称 属性 时会出错。您可以打印名称或设置其他属性,但据我所知这不是您可以做的事情。