VBA - 在“我!”中评估一个字符串。变量

时间:2013-09-12 14:56:29

标签: string vba variables eval

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

1 个答案:

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