gpt4 book ai didi

excel - vba 将控制称为变量语法

转载 作者:行者123 更新时间:2023-12-04 22:29:31 25 4
gpt4 key购买 nike

我正在使用 VBA 创建控件,但无法设置 字体 通过将它们称为控件。
我命名它们,如果我按名称引用它们,可以修改字体Me.(control variable name).Font .
我需要知道正确的语法才能完成这项工作。
我想我已经尝试了所有组合,但没有一个成功。

For CountRecords = 0 To rs.RecordCount - 1
tempLeft = 6
For countfields = 0 To rs.Fields.Count - 1
tempname = rs.Fields.Item(countfields).Name & CountRecords
frmtst.Controls.Add "forms.textbox.1", tempname
Set ctl = Me.frmtst(tempname)
Me.test.Font = 14 'set the font on a test textbox
Me.Controls(tempname).Value.Font = 14 '****Trouble line ********
ctl.Width = ((columnwidth(countfields) ^ 0.8) * 10) + 25
ctl.Height = 24
ctl.Left = tempLeft 'templeft + columnwidth(CountFields) + 18
tempLeft = tempLeft + ctl.Width + 3
ctl.Top = 20 * CountRecords + 3
ctl = rs.Fields.Item(countfields).Value
If rs.Fields.Item(countfields).Type = 6 Then
ctl = Format(ctl, "$#,##0.00")
end if
Next countfields
rs.MoveNext
Next CountRecords

最佳答案

如何正确引用控件

您可以引用控件

  • 1a) 直接按名称并使用 IntelliSense(例如 Me.Test ),
  • 1b) 间接通过Controls收藏或
  • 2) 通过直接或间接设置对象来隐式(例如 Set ctl = Me.Controls(tempname) )

  • 注意粒子 Me 总是指 当前用户窗体实例 (不是它的名字)并且可以/应该在用户表单代码模块中使用。
    例如,您可以引用 Me.Controls或控件集合中的给定项目,例如 Me.Controls(tempname) .
    - 是 使用不当 ,但是要从该表单的代码后面引用 UserForm 的默认实例(例如 frmtst )。
    此外,不可能在像 Me.frmtst(tempname) 这样的同一语句中同时引用两者。 .

    建议阅读以加深理解: UserForm1.Show?

    1a) 缺少 .Size .Font 的测试分配中的属性
      ' Direct referencing a control of the current Userform instance - missing .Size property
    Me.Test.Font.Size = 14 ' instead of: Me.test.Font = 14

    1b) .Value 的错误插入失败前的属性 .Font 属性
      ' Indirect referencing a control of the current Userform instance - bad .Value prop, .Font prop without .Size 
    Me.Controls(tempname).Font.Size = 14 ' instead of: Me.Controls(tempname).Value.Font = 14

    2) 对象引用

    但是,如果您更喜欢将对象设置到内存中,则案例 [1b] 中所示的代码行是多余的,并且
    你应该决定坚持选择的方法。
    Dim ctl As MsForms.TextBox              ' declare MSForms object (e.g. TextBox, or Object)
    Set ctl = Me.Controls(tempname) ' instead of: Set ctl = Me.frmtst(tempname)
    ctl.Font.Size = 14 ' instead of: .Font = 14

    补充说明

    始终使用 Option Explicit检查所有变量的正确和完整声明(在您的代码中包含一些变量会很好)。

    顺便说一句,您实际上是否通过指数计算了控件的宽度,即 ^ 0.8) * 10) + 25 ?

    关于excel - vba 将控制称为变量语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388076/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com