背景
我使用标准化名称在userform中有一组对象(对于此示例Listbox对象),我想使用计数器循环动态重命名它们。
的问题:
如果我要问的是甚至可能的话,我还没想办法,但是,我想确认一下。
解决方案方法:
到目前为止没有什么,就像我说的那样(参考上图)我需要一种方法来设置for循环中对象的值,如下所示:
For CounterItems = 1 To 18 'Hours in Template
ListBox_Time(CounterItems).Value="Dummy" & CounterItems
Next CounterHours
然而,我对如何这样做(或者如果它是可以实现的)毫无头绪。
的问题:
有没有办法使用计数器来投射变量/对象?
答案 0 :(得分:5)
不,您在使用用户表单时无法修改名称,您将获得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
但是当您尝试写入name属性时,您会发生错误。您可以打印名称或设置其他属性,但据我所知,这不是您可以做的事情。
答案 1 :(得分:4)
如果您只想按编号更改某些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
答案 2 :(得分:1)