0

解決しました!

特定のセルが空でないことを検証する必要があるため、サブルーチンを作成して、チェックが必要な変数を渡したいと考えています。

これは私が思いついたものです:

Sub errorMessage(errMsg As String, errRange As String)
If Range(errRange) = "" Then
    MsgBox errMsg, , "Error:"
    Range(errRange).Activate
    'this is what i was looking for :doh:, the 'end' line terminates everything..
    END
End Sub

ボタンから呼び出すと、実際にボタンのサブが終了しますか?

すなわち

Private Sub CommandButton1_Click()

    Call errorMessage("name is missing", "D4")

    'this function shouldn't be called if there was a msgbox displayed with the above call 
sendEmail 


End Sub

どうすればこれを実現できますか?

編集:

OKだから、これが私が解決した方法です。私がこれをやろうとしている理由は、buttonClickサブで大量のコード行を避けるためです。あなたの考えは何ですか??

sendEmail サブルーチンを実行する前に、約 25 の質問の空白をチェックする必要があることに注意してください。

Private Sub CommandButton1_Click()


    Call validateEntry("Client Name is missing.", "D4")
    Call validateEntry("# not complete.", "D5")


    Call validateEntry("Address same as CV?", "D6")


    Call validateEntry("Number missing.", "D8")
    Call validateEntry("Type missing.", "D9")
    Call validateEntry("Q1 requires a Yes or No.", "E19")
    Call validateEntry("Q2 requires a Yes or No.", "E21")
    Call validateEntry("Q3 requires a Yes or No.", "E23")
    Call validateEntry("Q4 requires a Yes or No.", "E25")
    Call validateEntry("Q5 requires a Date.", "D28")
    Call validateEntry("Q6 requires a Yes or No.", "E30")
    Call validateEntry("Q7 requires a Yes or No.", "E32")



MsgBox "passed"
'sendEmail
End Sub


Sub validateEntry(errMsg As String, errRange As String)
    If Range(errRange) = "" Then
        MsgBox errMsg, , "Error:"
        Range(errRange).Activate
        End
    End If
End Sub
4

2 に答える 2

2

したがって、あなたの例では、セル D4 にデータがある場合にのみ送信される「合格」通知を探していますよね?

これはうまくいくはずです:

Private Function errorMessage(errMsg As String, errRange As String) As Boolean
    errorMessage = False

    If Len(Trim(Range(errRange))) = 0 Then
        MsgBox errMsg, , "Error:"
        Range(errRange).Activate

        errorMessage = True
    End If
End Function

Public Sub CommandButton1_Click()
    If errorMessage("name is missing", "D4") = False Then
        MsgBox "passed"
    End If
End Sub

または、関数内からすべての MsgBox 通知を処理して、同様のロジックをグループ化し、ボタン クリック イベント サブをきれいに保つことができます。

Private Function errorMessage(errMsg As String, errRange As String)
    If Len(Trim(Range(errRange))) = 0 Then
        MsgBox errMsg, , "Error:"
        Range(errRange).Activate
    Else
        MsgBox "passed"
    End If
End Function

Public Sub CommandButton1_Click()
    Call errorMessage("name is missing", "D4")
End Sub
于 2013-02-07T21:26:21.213 に答える
1

ここには多くの誤解があります。

まず、いいえ、デフォルトではボタン ルーチンは終了しません。ボタン内でそれを処理する必要があります。

End If次に、ここのどこかに欠けています:

Sub errorMessage(errMsg As String, errRange As String)
    If Range(errRange) = "" Then  ' This may not be the best way to check for 
                                  ' an empty range
        MsgBox errMsg, , "Error:"
        Range(errRange).Activate
        Exit Sub
End Sub

そもそもサブルーチンさえ必要ありません。次のように、ブール値を返す関数が必要です。

Function errorMessage(errMsg As String, errRange As String) as Boolean
    ' Function returns True if an error occured
    errorMessage = False
    If Range(errRange) = "" Then
        MsgBox errMsg, , "Error:"
        Range(errRange).Activate
        errorMessage = True
    End If
End Sub

そしてここに:

Private Sub CommandButton1_Click()

    If errorMessage("name is missing", "D4") Then
        Exit Sub
    End If

    'this msgbox should not display if the above msgbox is displayed
    MsgBox "passed"

    ' continue on with all of your fun processing here
End Sub
于 2013-02-07T21:27:39.447 に答える