我有一个带有标签和文本框的UserForm。我想循环这些标签,获取它们的标题属性的值,并输入这个值作为我的列标题。
下面是我的代码片段:
Dim element As Control
For Each element In WQTR_Form.Controls
If TypeName(element) = "Label" Then
For Each Cell In Range.Rows(1).Cells
Cells.Value = ***Label.caption***
Next Cell
End If
Next element
我想弄清楚的是如何得到***Lable.Caption***
。
我尝试了element.Caption
,但是自动完成列表没有将标题显示为元素的属性,因为在当前上下文元素中,标题是类型控件。我需要的是如何为表单上的每个标签获取Label.Caption类型的值。
当然,我的整个方法可能是错的!如果你有其他办法的话,请告诉我。提前谢谢你的帮助。
更新:*
首先,谢谢你所有的回答。现在,我有其他奇怪的地方了。我提到这一点是为了回应科斯塔斯·K在下面的评论,但我想把它加到这个问题上。我正在为Cell
在For Each Cell in Range.Rows(1).Cells
中获得一个“未定义变量”的编译错误。
因此,作为一个新手,我尝试添加Dim Cell as Range
。然后,我得到一个编译错误,说明参数对于Range
在For Each Cell in Range.Rows(1).Cells
中不是可选的。也许第二个错误是添加Dim的结果?也许整行代码都错了!?
我曾考虑过尝试类似For Each Cell in Range("A1":Z1)
的东西,但它似乎违背了Rows(1).Cells
的目的。
发布于 2017-07-21 13:17:59
有几组对象继承自更一般的对象。Control
是一个通用对象,多个对象(TextBox
、Label
、ComboBox
)继承Control
的所有属性和方法,然后添加仅适用于它们的更多特定属性和方法。
例如,每个控件都具有属性Top
、Height
、Left
和Width
。因此,MS创建了一个名为Control
的类,其中包含了这四个属性。然后,他们创建了一个名为Label
的类,它继承自Control
,以便Label
也具有这四个属性。接下来,他们向.Caption
类添加了一个Label
属性--标题是特定于标签的,而不适用于文本框、列表框等。
当您调用lblMyLabel.Height
时,解释器会遍历Label
类到Control
类,以确定Height
是什么。另一方面,当您调用ctlMyControl.Caption
时,解释器会将其转换为ctlMyControl.Object.Caption
。Object
属性是通向Caption
属性所在的Label
类的途径。
因为解释器知道在运行时它是什么类型的控件,因此Intellisense在设计时不知道,只能给出通用的Control
属性和方法。
若要从标签创建列标题,请考虑以下代码
Private Sub CommandButton1_Click()
Dim ctl As Control
Dim lColCnt As Long
For Each ctl In Me.Controls
If TypeName(ctl) = "Label" Then
lColCnt = lColCnt + 1
Sheet1.Cells(1, lColCnt).Value = ctl.Caption
End If
Next ctl
End Sub
Dim
语句是您以后将使用的声明变量的方式。Me
关键字引用我正在编码的Userform。如果您的代码位于标准模块中,则必须加载表单并按名称引用它(就像在代码中那样),但是如果您在表单的类模块中工作,则可以使用Me
。
每次遇到标签时,我都会增加一个变量,然后使用Cells
属性写出Caption
。Cells
的第一个参数是行号(标题行为1),第二个参数为列号,每个标签的行号增加一个。
发布于 2017-07-21 13:10:17
您将使用控制变量(如Element.Caption
)。您希望循环遍历Userform中的所有“元素”,并检查每个元素的标题。
谢谢:)
发布于 2017-07-21 13:10:32
你可以用element.BoundValue来代替你的Lable.Caption,希望它能帮你。
https://stackoverflow.com/questions/45238046
复制相似问题