vba将控件称为变量语法

时间:2019-01-27 12:22:47

标签: excel vba controls userform

我正在使用VBA创建控件,并且无法通过将它们称为控件来设置 font 。 我为它们命名,并且如果我通过名称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

2 个答案:

答案 0 :(得分:1)

在表单过程中使用我代替了表单名称,该名称似乎在frmtst上方。因此Me.frmtst(tempname)是双重引用。 您可以使用tempname引用控件Me.tempname。使用Me.tempname.Font.Name = "Lucida Console"设置字体,并使用Me.tempname.Font.Size = 10设置字体大小

答案 1 :(得分:0)

如何正确引用控件

您可以引用控件

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

请注意,粒子 Me 始终引用当前UserForm实例 (不是其名称)< / em>,并且可以/应该在userform代码模块中使用。 例如,您可以引用Me.Controls或控件集合中的给定项目,例如Me.Controls(tempname)。 -这是不好使用,但是要从后面的表单代码中引用UserForm的默认实例(例如frmtst)。 此外,不可能在同一语句中引用两者,例如Me.frmtst(tempname)

建议您阅读以更深入地理解UserForm1.Show?

1a)测试分配给.Size的{​​{1}}属性丢失

.Font

1b).Font属性失败之前, ' Direct referencing a control of the current Userform instance - missing .Size property Me.Test.Font.Size = 14 ' instead of: Me.test.Font = 14 属性的错误插入

.Value

2)对象引用

但是,如果您希望将对象设置到存储器,则在[1b]情况下显示的代码行是多余的,并且 您应该决定坚持选择的方法。

  ' 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 

更多评论

始终使用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计算控件的宽度吗?