我有一个带标签和文本框的UserForm。我想遍历Lables,获取其Caption属性的值并输入该值作为我的列标题。
以下是我的代码片段:
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
但是自动完成列表没有将Caption显示为元素的属性,因为在当前上下文元素中属于Controls类型。我需要的是如何为我的表单上的每个Label获取Type Label.Caption的值。
当然,我的整个方法可能都是错的!如果你有其他方法的建议,请告诉我。在此先感谢您的帮助。
UPDATE:*
首先感谢您的所有答案。现在,我有其他的怪异。我在回答Kostas K的评论时提到了它,但我想将其添加到问题中。我在Cell
中收到For Each Cell in Range.Rows(1).Cells
的编译错误“未定义变量”。
所以,作为一个新手,我尝试添加Dim Cell as Range
。然后我收到一个编译错误,说明Range
For Each Cell in Range.Rows(1).Cells
中的参数不是可选的。也许第二个错误是添加昏暗的结果?也许整行代码都错了!????
我曾考虑尝试类似For Each Cell in Range("A1":Z1)
的内容,但这似乎违背了Rows(1).Cells
的目的。
答案 0 :(得分:0)
您将使用控制变量ie Element.Caption
。您想要遍历Userform中的所有"元素"并检查每个元素的标题。
谢谢:)
答案 1 :(得分:0)
您可以用 element.BoundValue 替换 Lable.Caption 希望它可以帮到你。
答案 2 :(得分:0)
有一些对象继承自更通用的对象。 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
属性是指Label
属性所在的Caption
类的途径。
因为解释器在运行时计算出它是什么类型的控件,所以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),第二个参数是列号,每个标签的参数都增加一个。