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

EDIT 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 に答える