VBA:if语句的子程序,并返回true或false?

解决了!

我必须validation某些单元格不是空的,所以我想创build一个子例程并传递我需要检查的variables。

这就是我想到的:

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 

现在当我从我的button调用它,它会实际结束button的子?

 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 

我怎样才能做到这一点?

编辑:

好所以这就是我所说的,我试图这样做的原因是为了避免在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 

所以,在你的例子中,你正在寻找“通过”的通知,只有在单元格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通知,将类似的逻辑分组在一起,并保持button单击事件子项清理:

 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 

这里有一些误解。

首先,不,默认情况下不会结束button例程。 你将需要处理你的button。

接下来,你错过了一个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