不使用Label的名称,请参阅并更改标签的标题?

时间:2015-06-06 23:01:18

标签: vba labels

我想更改多个标签框的标题。标签按顺序命名(DAY1,DAY2,DAY3 ...... DAY14)。我需要帮助找到一种方法来做到这一点;

   DAY1.Caption = "1"

没有隐含地使用标签名称......更像是:

   ("DAY" & i).Caption = 1

其中i是整数。我收到各种错误。我的猜测是我不知道正确的对象变量或语法。有什么想法吗?

2 个答案:

答案 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