我想更改多个标签框的标题。标签按顺序命名(DAY1,DAY2,DAY3 ...... DAY14)。我需要帮助找到一种方法来做到这一点;
DAY1.Caption = "1"
没有隐含地使用标签名称......更像是:
("DAY" & i).Caption = 1
其中i是整数。我收到各种错误。我的猜测是我不知道正确的对象变量或语法。有什么想法吗?
答案 0 :(得分:0)
我认为您的问题是在VBA的背景下(请编辑您的问题以添加" VBA"标记,如果是这样)。一个很好的解决方案是在创建标签时保留对标签的引用。您可以通过编程方式创建这样的标签列表:
Dim label As Label
Dim dayLabels As New List(Of Label)
For i = 1 To 7
Set label = UserForm.Controls.Add("Forms.Label.1", "Day" & i, True)
dayLabels.Add(label)
With label
.Caption = "Day" & i
.Left = 10
.Width = 50
.Top = 10 * i
End With
Next
请注意,您需要将UserForm显示为vbModeless
才能使用此代码。另请注意,标签的定位是使用.Top
和.Left
字段完成的;我使用.Top
值来避免控件重叠(例如,您也可以使用.Left
水平分布它们。)
现在您已将所有标签引用存储在列表中,您可以像原先尝试的那样通过索引简单地引用它们:
dayLabels(3).Text = "The text to appear on Day3 label"
答案 1 :(得分:0)
我喜欢你的目标。我遇到两个问题。 Access VBA注册
的编译错误Dim daylabels As New List(Of Label)
如果删除该行,VBA不会识别第4行中的任何对象;
set label = Userform.Controls.Add("Forms.Label.1, "Day" & I, True
我意识到我没有指定我正在使用VBA进行访问。我试着玩弄措辞。 Excel具有Userforms但Access以不同方式处理表单...没有运气。这是我正在使用的完整Sub;
Private Sub Command6_Click()
Dim DURATION As Integer
Dim i As Integer
Dim x As Label
DURATION = ((END_DATE.Value) - (START_DATE.Value)) + 1
i = 1
For i = 1 To DURATION
Set x = UserForm.Comtrols.Add("Forms.Label.1", "DAYx" & i, True)
With x
.Caption = "Day" & i
.Left = 10
.Width = 50
.Top = 30 + (10 * i)
End With
Next