如何从模块访问 vba 更改子窗体上按钮的 Caption 属性

问题描述 投票:0回答:1

问题;

运行时错误“438”: 对象不支持此属性或方法

我正在尝试根据查询结果动态加载按钮。我有一个记录集设置来索引所述结果,并设置按钮上的标题以匹配查询的每个单独结果。 我最初将这段代码附加到包含所有按钮的子窗体的 on open 事件。每个按钮都有一个设定的名称。第一页上的命令 1-15,第二页上的 16-30 等。该代码最初有效,但我想将其移至一个模块中,这样我就可以从任何子表单中调用它,而不是将这个大代码块放入打开事件(12+)的每个子表单。 我的第一个问题是试图用一个变量来精确定位特定的按钮,我可以在下面解决这个问题。

 Forms![001_frm_Home]![Subform01]![Subform02].['uTargetButton'].Caption = Trim(rs!Itemkey)

我已经尝试了引号的每种组合,将 .Caption 属性设置为变量并使用上面行中的变量。我在各种论坛上看到一些帖子说这可能是不可能的,因为我可能需要将命令按钮定义为该函数中的命令按钮才能访问 .Caption 属性。 我将把代码块放在下面;

Set rs = CreateObject("ADODB.Recordset")
    rs.CursorType = 2 ' needed to set the recordset for updates
    rs.LockType = 2
    rs.Open strsql, con, 1   ' 1 = adOpenKeyset
    
    If rs.RecordCount > 0 Then ' We found a good number, ok to move on
        rs.MoveFirst
        uButtonNumber = uStartButton
        uCount = 0
        Do While Not rs.EOF
            uButtonNumber = uButtonNumber + 1
            uCount = uCount + 1
            uTargetButton = "Command" & uButtonNumber
                
            Forms![001_frm_Home]![Subform01]![Subform02].['uTargetButton'].Caption = Trim(rs!Itemkey)
            rs.MoveNext
        Loop
    Else 'No Record

希望这一切都是有意义的,如果有任何进一步的信息有帮助,请告诉我。预先感谢。

vba ms-access ms-access-2016
1个回答
0
投票

您必须访问子表单控件的

Form
属性:

Forms![001_frm_Home]![Subform01].Form!uTargetButton.Caption = "Hello"

如果您从

001_frm_Home
形式调用此函数,您还可以写:

Me![Subform01].Form!uTargetButton.Caption = "Hello"

说明,当您向窗体添加子窗体时,会向父窗体添加

Subform
控件。该
Subform
控件在属性表的
Source Object
选项卡中具有属性
Data
。您可以在此处从下拉列表中选择一个表单。选择作为子表单的表单可通过
Form
属性以编程方式使用。


您的子表单似乎嵌套了两次。那么这将是:

Forms![001_frm_Home]![Subform01].Form![Subform02].Form(uTargetButton).Caption = "x"

好吧,不明白

uTargetButton
应该是一个变量名,因为你用单引号分隔它。

您可以使用

Form(nameAsString)
按名称访问控件。
()
正在索引控件默认集合。你也可以写
Form.Controls(nameAsString)
。索引也可以是整数。

© www.soinside.com 2019 - 2024. All rights reserved.