首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel获取UserForm标签标题属性值

Excel获取UserForm标签标题属性值
EN

Stack Overflow用户
提问于 2017-07-21 12:44:22
回答 3查看 10.9K关注 0票数 1

我有一个带有标签和文本框的UserForm。我想循环这些标签,获取它们的标题属性的值,并输入这个值作为我的列标题。

下面是我的代码片段:

代码语言:javascript
运行
复制
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在下面的评论,但我想把它加到这个问题上。我正在为CellFor Each Cell in Range.Rows(1).Cells中获得一个“未定义变量”的编译错误。

因此,作为一个新手,我尝试添加Dim Cell as Range。然后,我得到一个编译错误,说明参数对于RangeFor Each Cell in Range.Rows(1).Cells中不是可选的。也许第二个错误是添加Dim的结果?也许整行代码都错了!?

我曾考虑过尝试类似For Each Cell in Range("A1":Z1)的东西,但它似乎违背了Rows(1).Cells的目的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-21 13:17:59

有几组对象继承自更一般的对象。Control是一个通用对象,多个对象(TextBoxLabelComboBox)继承Control的所有属性和方法,然后添加仅适用于它们的更多特定属性和方法。

例如,每个控件都具有属性TopHeightLeftWidth。因此,MS创建了一个名为Control的类,其中包含了这四个属性。然后,他们创建了一个名为Label的类,它继承自Control,以便Label也具有这四个属性。接下来,他们向.Caption类添加了一个Label属性--标题是特定于标签的,而不适用于文本框、列表框等。

当您调用lblMyLabel.Height时,解释器会遍历Label类到Control类,以确定Height是什么。另一方面,当您调用ctlMyControl.Caption时,解释器会将其转换为ctlMyControl.Object.CaptionObject属性是通向Caption属性所在的Label类的途径。

因为解释器知道在运行时它是什么类型的控件,因此Intellisense在设计时不知道,只能给出通用的Control属性和方法。

若要从标签创建列标题,请考虑以下代码

代码语言:javascript
运行
复制
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属性写出CaptionCells的第一个参数是行号(标题行为1),第二个参数为列号,每个标签的行号增加一个。

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 13:10:17

您将使用控制变量(如Element.Caption )。您希望循环遍历Userform中的所有“元素”,并检查每个元素的标题。

谢谢:)

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 13:10:32

你可以用element.BoundValue来代替你的Lable.Caption,希望它能帮你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45238046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档