如何从表单中的字段名称确定对象类型?
How to determine the Object Type from the field name in a form?
我试图概括这个 Sub。该子程序适用于文本字段,无需对复选框进行测试。复选框没有 .BackStyle
也没有 .ForeColor
属性.
我试过下面的代码:
Private Sub EnableEdit(strFieldname As String, Optional bUseRed As Boolean = False)
Me.Controls(strFieldname).Enabled = True
Me.Controls(strFieldname).Locked = False
If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
Me.Controls(strFieldname).BackStyle = 1
If bUseRed Then
Me.Controls(strFieldname).ForeColor = vbRed
Else
Me.Controls(strFieldname).ForeColor = vbBlack
End If
End If
End Sub
但是
If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
语法不正确。 TypeOf
需要一个对象,Me.Controls(strFieldname)
是控件本身。
我尝试了 Me.Controls(strFieldname)
的替代方法。
第If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
行有问题:
- 正确的语法是:
If Not TypeOf Me.Controls(strFieldname) Is CheckBox Then
如果您使用的是标准访问控制,最简单的方法就是访问 ControlType
属性
If Not Me.Controls(strFieldname).ControlType = acCheckbox Then
对于特殊控件,TypeOf 可能很有用。您需要指定 class,这可能是 Access.Checkbox
(msforms.Checkbox
也可以在 Access 中使用,但非常不常见)。
If Not TypeOf Me.Controls(strFieldname) Is Access.Checkbox Then
顺便说一下,你的错误的主要原因是括号的使用过多。如果用括号将对象括起来,则会得到其默认值 属性:
Me.Controls("MyCheckbox") 'A checkbox
(Me.Controls("MyCheckbox")) 'The value of a checkbox
我试图概括这个 Sub。该子程序适用于文本字段,无需对复选框进行测试。复选框没有 .BackStyle
也没有 .ForeColor
属性.
我试过下面的代码:
Private Sub EnableEdit(strFieldname As String, Optional bUseRed As Boolean = False)
Me.Controls(strFieldname).Enabled = True
Me.Controls(strFieldname).Locked = False
If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
Me.Controls(strFieldname).BackStyle = 1
If bUseRed Then
Me.Controls(strFieldname).ForeColor = vbRed
Else
Me.Controls(strFieldname).ForeColor = vbBlack
End If
End If
End Sub
但是
If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
语法不正确。 TypeOf
需要一个对象,Me.Controls(strFieldname)
是控件本身。
我尝试了 Me.Controls(strFieldname)
的替代方法。
第If Not(TypeOf (Me.Controls(strFieldname)) Is CheckBox) Then
行有问题:
- 正确的语法是:
If Not TypeOf Me.Controls(strFieldname) Is CheckBox Then
如果您使用的是标准访问控制,最简单的方法就是访问 ControlType
属性
If Not Me.Controls(strFieldname).ControlType = acCheckbox Then
对于特殊控件,TypeOf 可能很有用。您需要指定 class,这可能是 Access.Checkbox
(msforms.Checkbox
也可以在 Access 中使用,但非常不常见)。
If Not TypeOf Me.Controls(strFieldname) Is Access.Checkbox Then
顺便说一下,你的错误的主要原因是括号的使用过多。如果用括号将对象括起来,则会得到其默认值 属性:
Me.Controls("MyCheckbox") 'A checkbox
(Me.Controls("MyCheckbox")) 'The value of a checkbox