vba 将控制称为变量语法
Posted
技术标签:
【中文标题】vba 将控制称为变量语法【英文标题】:vba refer to control as variable syntax 【发布时间】:2019-06-20 15:13:15 【问题描述】:我正在使用 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
【问题讨论】:
【参考方案1】:如何正确引用控件
你可以引用控件
1a) 直接按名称并使用 IntelliSense(例如Me.Test
),
1b) 间接通过Controls
集合或
2) 通过直接或间接设置对象来隐式(例如Set ctl = Me.Controls(tempname)
)
注意,粒子 Me
总是引用 当前的 UserForm 实例 (不是它的名字) 并且可以/应该在用户表单代码模块中使用。
例如,您可以参考Me.Controls
或控件集合中的给定项目,例如Me.Controls(tempname)
。
- 不好的使用,但是从该表单的代码中引用用户表单的默认实例(例如frmtst
)。
此外,不可能在像Me.frmtst(tempname)
这样的同一语句中同时引用两者。
建议阅读以加深理解:UserForm1.Show?
1a) 分配给.Font
的测试分配中缺少.Size
属性
' Direct referencing a control of the current Userform instance - missing .Size property
Me.Test.Font.Size = 14 ' instead of: Me.test.Font = 14
1b) 在 .Font 属性失败之前错误插入 .Value
属性
' 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
?
【讨论】:
【参考方案2】:在表单过程中使用 Me 是表单名称的替换,它似乎是上面的frmtst
。所以Me.frmtst(tempname)
是双重参考。
您可以参考控件tempname
和Me.tempname
。用Me.tempname.Font.Name = "Lucida Console"
设置字体,用Me.tempname.Font.Size = 10
设置字体大小
【讨论】:
很棒的信息,问题解决了。这是我想要的“.size”。衷心感谢所有输入。是的,我使用了指数来确定大小。以前我为所有记录的每个字段建立了一个最大字符长度的数组。当我尝试使用比例公式时,我最终会在长公式上留下太多空白。因此,通过指数计算,结果恰到好处。以上是关于vba 将控制称为变量语法的主要内容,如果未能解决你的问题,请参考以下文章