Vba 单击事件时的MS Access if语句

Vba 单击事件时的MS Access if语句,vba,ms-access,Vba,Ms Access,我使用的是Ms Access表单,我创建了一个单击事件,用于定位文件夹位置,但现在我想根据不同的条件定位文件夹位置,但当我添加if语句时,它需要子、函数或属性。下面是一些演示代码。我真的希望有人能解释一下遗漏了什么 Private Sub Open_Email_Click() Dim stAppName As String Dim stAppNameA As String Dim stAppNameB As String stAppName = "C:\

我使用的是Ms Access表单,我创建了一个单击事件,用于定位文件夹位置,但现在我想根据不同的条件定位文件夹位置,但当我添加if语句时,它需要子、函数或属性。下面是一些演示代码。我真的希望有人能解释一下遗漏了什么

    Private Sub Open_Email_Click()
    Dim stAppName As String
    Dim stAppNameA As String
    Dim stAppNameB As String
    stAppName  = "C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & " DEMO\B " & Me.BC & " " & Me.UC & "\"
    stAppNameA = "C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & " DEMO\A\B " & Me.BC & " " & Me.UC & "\"
    stAppNameB = "C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & " DEMO\B\B " & Me.BC & " " & Me.UC & "\"

    If (Me.BC = "60") And Me.UC Like "REF123*" Then stAppNameA
    ElseIf (Me.BC = "60") And Not Me.UC Like "REF123*" Then stAppNameB
    Else: stAppName
    End If

Call Shell(stAppName, 1) 
End Sub

我认为您的
If
块在换行符和连续字符(:)的位置上有点混乱。尝试按如下方式重新格式化代码:

    If (Me.BC = "60") And Me.UC Like "REF123*" Then 
        stAppName =stAppNameA
    ElseIf (Me.BC = "60") And Not Me.UC Like "REF123*" Then 
        stAppName = stAppNameB
    Else 
        stAppName =stAppName
    End If

    Call Shell(stAppName, 1)

我认为您的
If
块在换行符和连续字符(:)的位置上有点混乱。尝试按如下方式重新格式化代码:

    If (Me.BC = "60") And Me.UC Like "REF123*" Then 
        stAppName =stAppNameA
    ElseIf (Me.BC = "60") And Not Me.UC Like "REF123*" Then 
        stAppName = stAppNameB
    Else 
        stAppName =stAppName
    End If

    Call Shell(stAppName, 1)

我认为您的函数逻辑可以简化为以下内容,使用更少的重复表达式可能更具可读性:

Private Sub Open_Email_Click()
    Dim strTmp As String

    If Me.BC = "60" Then
        If Me.UC Like "REF123*" Then
            strTmp = " DEMO\A\B "
        Else
            strTmp = " DEMO\B\B "
        End If
    Else
        strTmp = " DEMO\B "
    End If
    Call Shell("C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & strTmp & Me.BC & " " & Me.UC & "\", 1)
End Sub
或者,使用
Select Case
语句:

Private Sub Open_Email_Click()
    Dim strTmp As String

    Select Case True
        Case Me.BC <> "60"
            strTmp = " DEMO\B "
        Case Me.UC Like "REF123*"
            strTmp = " DEMO\A\B "
        Case Else
            strTmp = " DEMO\B\B "
    End Select
    Call Shell("C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & strTmp & Me.BC & " " & Me.UC & "\", 1)
End Sub
致:


我认为您的函数逻辑可以简化为以下内容,使用更少的重复表达式可能更具可读性:

Private Sub Open_Email_Click()
    Dim strTmp As String

    If Me.BC = "60" Then
        If Me.UC Like "REF123*" Then
            strTmp = " DEMO\A\B "
        Else
            strTmp = " DEMO\B\B "
        End If
    Else
        strTmp = " DEMO\B "
    End If
    Call Shell("C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & strTmp & Me.BC & " " & Me.UC & "\", 1)
End Sub
或者,使用
Select Case
语句:

Private Sub Open_Email_Click()
    Dim strTmp As String

    Select Case True
        Case Me.BC <> "60"
            strTmp = " DEMO\B "
        Case Me.UC Like "REF123*"
            strTmp = " DEMO\A\B "
        Case Else
            strTmp = " DEMO\B\B "
    End Select
    Call Shell("C:\Windows\explorer.exe C:\DEMO\TEST\" & Me.Office & strTmp & Me.BC & " " & Me.UC & "\", 1)
End Sub
致:


Lee这是一种更干净的方法,我尝试过使用它,但它并不是只为了演示\B\B而打开到新位置的文件路径。在代码中还有BD,我认为它应该是BC。@new2编程很好!我现在已经更正了
BD
typo.@new2程序错误已经纠正,代码现在运行成功了吗?我现在没有收到错误,但是文件夹位置没有打开到正确的位置,并且只打开到我的文档而不是实际的文件夹,我有位置名称,但好像缺少了什么。我可以在控制台中打印位置名称以查看事件试图查找的位置吗?谢谢Lee,它工作得很好,解决了问题:)Lee这是一种更干净的方法,我尝试过使用它,但它不会打开到新位置的文件路径,只是为了演示\B\B。此外,在您的代码中有BD,我认为它应该是BC。@new2编程很好!我现在已经更正了
BD
typo.@new2程序错误已经纠正,代码现在运行成功了吗?我现在没有收到错误,但是文件夹位置没有打开到正确的位置,并且只打开到我的文档而不是实际的文件夹,我有位置名称,但好像缺少了什么。我可以在控制台中打印出位置名称以查看事件试图查找的位置吗?感谢Lee,它非常有效,并解决了问题:)