我可以在 Access VBA 中使用字符串变量作为命令的一部分吗?

Can I use a string variable as part of a command in Access VBA?

我在 Access 中有一个表单,其中有一些 VBA 自动化以防止将垃圾数据输入数据库。该自动化的一部分是清除用户取消选中的步骤的下游步骤。它跟踪一个线性过程,因此如果步骤 1、2、3 和 4 完成,并且用户取消选中 2,代码将取消选中 3 和 4。

这些步骤分布在多种可能的测试形式中。我想编写一个程序可以调用自动取消选中的子程序,并根据用户单击的测试表单将变量传递给子程序。

这是我的代码,它不起作用。 ("Dry" 和 "Wet" 是流程中的步骤,按顺序排列。):

Private Sub t2Dry_AfterUpdate()
    Dim TFNum As String
    TFNum = "t2"
    'Autodate and expose wet check fields once t2dry box is checked
    If t2Dry Then
    t2DDate.Enabled = True
    t2DDate.SetFocus
    t2DDate = Date
    t2Wet_Label.Visible = True
    t2Wet.Visible = True
    t2Wdate_Label.Visible = True
    t2Wdate.Visible = True
    End If

    'If dry box unchecked after date entered, undo all subsequent steps
    If Not t2Dry And t2date = "" Then
    Dim t2DUnchk As Byte
    t2DUnchk = msgbox("Unchecking this box will clear all subsequent data. Are you sure?", vbYesNo + vbQuestion, "Undo this step?")
    If t2DUnchk = vbYes Then
    t2DDate.SetFocus
    t2DDate = ""
    t2DDate.Enabled = False
    clearWetData (TFNum)
    Else: t2Dry = True
    t2DDate.SetFocus
    End If
    End If

End Sub

请注意,这仅适用于 Test Form 2,它在我的数据库和代码中定义为 t2。这就是声明 TFNum 变量的原因。从底部开始的 7 行,您会看到我在用户取消选中干框并且存在湿数据后调用我编写的子程序来清除湿数据。这是该子例程:

Private Sub clearWetData(TFNum)

        'Call this subroutine to clear wet data from test forms on uncheck of dry comm step.
        'This subroutine relies on the TFNum argument to decide which test form's wet data to clear.
        (TFNum)Wet = False
        t2Wdate.Visible = True
        t2Wdate.Enabled = True
        t2Wdate.SetFocus
        t2Wdate = ""
        t2Wdate.Enabled = False
        t2Wet_Label.Visible = False
        t2Wet.Visible = False
        t2Wdate_Label.Visible = False
        t2Wdate.Visible = False

End Sub

评论后的第一行是我正在尝试做的事情的示例:使用传递的变量 TFNum(这是一个包含文本 "t2" 的字符串)作为对象名称的一部分。 "t2Wet" 是我要清除的复选框对象之一的名称,因此我希望它以这种方式解析。

以 t2 开头的所有剩余代码已经可以运行;该子例程在调用时会清除除复选框以外的所有内容。

对不起,我写的是短篇小说,我想尽可能详细一点。感谢您的帮助!

据我了解,您的 (TFNum)Wet 是一个表单控件。如果是这样,您可以只使用控件集合:

Me.Controls(TFNum & "Wet") = False

好吧,我知道这个问题不是长期存在的,但是办公室里的一个朋友帮我解决了。

子例程的代码需要如下所示:

Private Sub clearWetData(TFNum As String)

    'Call this subroutine to clear wet data from test forms on uncheck of dry comm step.
    'This subroutine relies on the TFNum argument to decide which test form's wet data to clear.
    Me.Controls(TFNum & "Wet") = False
    Me.Controls(TFNum & "Wdate").Visible = True
    Me.Controls(TFNum & "Wdate").Enabled = True
    Me.Controls(TFNum & "Wdate").SetFocus
    Me.Controls(TFNum & "Wdate") = ""
    Me.Controls(TFNum & "Wdate").Enabled = False
    Me.Controls(TFNum & "Wet_Label").Visible = False
    Me.Controls(TFNum & "Wet").Visible = False
    Me.Controls(TFNum & "Wdate_Label").Visible = False
    Me.Controls(TFNum & "Wdate").Visible = False

End Sub

Me.Controls是所有表单控件的数组。通过首先调用它而不是直接调用所需的表单控件,我可以将我的变量 TFNum 用作字符串的一部分,该字符串定义了我想要与之交互的表单控件。