1

我在 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 的更多信息在这里

4

1 回答 1

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 不是其中的一部分。只需将其更改为您正在使用的类型。

于 2013-09-12T15:07:02.613 回答