在执行当前功能之前检查功能

时间:2018-06-03 16:52:14

标签: excel vba excel-vba

我在VBA上创建了两个单独的函数。

理想情况下,用户将为这些宏分配2个按钮。一个按钮用于验证数据myCheck(),另一个按钮用于提交数据onSubmit()

myCheck()函数是一个布尔值,设置为true或false,作为指示是否运行onSubmit()

因此,如果用户在验证数据之前按onSubmit(),则不应提交数据,因为myCheck()已初始化为False。请参阅以下代码:

Function myCheck() As Boolean

    myCheck = False

    'Do checking operation
    If chkTEP = True And chkNULL = True Then
        Output = MsgBox("Validation complete", vbInformation, "Validation")    
        myCheck = True    
    ElseIf chkTEP = False And chkNULL = True Then
        Output = MsgBox("Double check your TEP combination", vbCritical, "Validation")    
        myCheck = False    
    ElseIf chkTEP = True And chkNULL = False Then
        Output = MsgBox("There is a blank cell", vbCritical, "Validation")    
        myCheck = False    
    Else:
        Output = MsgBox("Please make sure spreadhseet is filled correctly", vbCritical, "Validation")    
        myCheck = False    
    End If

End Function

从上面可以看出,myCheck函数可以导致TRUE或FALSE。

此后的下一步是运行另一个函数onSubmit()。如果myCheck为FALSE,那么onSubmit将无效......等等。

Sub onSubmit()

    If myCheck = False Then
        GoTo FuncEnder    
        Else
        'execute onSubmit function here    
    FuncEnder:

    End If

End Sub

我发现一旦onSubmit()被执行,它运行整个函数myCheck(),而不是只检查它存储的布尔值。

2 个答案:

答案 0 :(得分:1)

您的按钮需要与“执行”按钮相关联。宏。它将首先测试您的支票,并仅在<>时执行提交假。当您可以将所有这些与一个按钮链接在一起时,不需要2个按钮。您将获得相同的所需输出,用户只需少一步。我还将你的功能改为" Public Function"

功能1

Public Function myCheck() As Boolean

'YOUR FUNCTION HERE

End Function

功能2

Public Function onSubmit()

'YOUR FUNCTION HERE

End Function

Sub Execute()

If myCheck = False Then Exit Sub
Else
onSubmit

End Sub

答案 1 :(得分:0)

在模块中声明myCheck的Public变量。可以检查您的第一个检查按钮是否被按下。例如mybutton.tag = true。

Public myCheck as boolean
那么一切都应该没问题。它会运行,因为它总是错误的。

Sub mybutton_click()

    myCheck  ' calls the mycheck function

    if mycheck then 
       mybutton.tag="true"
    else
       mybutton.tag = ""
    end if

end sub

然后

在你的第二个子上:

Sub onSubmit()

    if mybutton.tag <> "true" then 
       msgbox" You need to press Mycheck button First!"
       exit sub
    else
        If myCheck = False Then end sub   

        'execute onSubmit function here    

    End If

End Sub