我在Access 2010中的VBA脚本中遇到问题。
我有一个将字符串拆分成数组的功能。然后我想评估所有数组元素(字符串)。这些元素表示我想与变量“me”一起使用的表单名称。
这是我的代码:
Private Sub enable_rec(rec)
Dim r
r = Split(rec, ", ")
For Each rl In r
'rl = Me.Eval(rl)
MsgBox (rl)
Me!rl.Enabled = True
Me!rl.Locked = False
Next
End Sub
我也试过这个Me!eval(rl).enabled = True
。
我按照“Nicholas Post”的建议更新了代码,现在有了这个:
Private Sub enable_rec(rec)
Dim r
Dim ctrl As Control
r = Split(rec, ", ")
For Each rl In r
ctrl = Me.Controls
If Not ctrl Is Nothing Then
MsgBox (rl)
ctrl.Enabled = True
ctrl.Locked = False
End If
Next
End Sub
我得到run-time error '91': Object Variable or With Block not Set
编辑2 - 自己解决: 它现在使用以下代码
Private Sub enable_rec(rec)
Dim arr As Variant, ctrl As Control
arr = Split(rec, ", ")
For Each ctrl In Me.Controls
'MsgBox (ctrl.Name) 'rl.ControlType
If Not ctrl Is Nothing Then
If IsInArrayLoop(ctrl.Name, arr) Then
ctrl.Enabled = True
ctrl.Locked = False
End If
End If
Next
End Sub
有关函数IsInArrayLoop here的更多信息。
答案 0 :(得分:2)
你很接近,但是你必须得到你试图通过名字使用的对象。您必须将代码更改为以下内容:
Private Sub enable_rec(rec)
Dim arrNames As Array = Split(rec, ", ")
For Each strName As String In arrNames
Dim ctrl As Control = Me.Controls(strName)
If Not ctrl Is Nothing Then
ctrl.Enabled = True
ctrl.Locked = False
End If
Next
End Sub
我正在使用Control
对此进行测试,但Locked不是其中的一部分。只需将其更改为您正在使用的类型。