Vba 空输入框和错误解析

Vba 空输入框和错误解析,vba,outlook,outlook-2010,Vba,Outlook,Outlook 2010,我试图弄清楚如何确保在每个阶段都将数据输入到InputBox(否则我希望弹出消息并结束输入)。我有一个MsgBox,如果没有输入任何内容,它会弹出,但我想添加一个选项,使子项保留在它所在的输入框中,以便用户仍然可以输入数据 我尝试过使用vbRetryCancel,重试将循环,然后再也不会真正取消(我必须强制outlook关闭以结束宏),或者取消将循环,再也不会重试。如果我可以这样做,在输入数据或单击“取消”之前,输入框不会前进“确定”,这也会起作用,但如果没有输入任何内容,我仍然需要一个MsgB

我试图弄清楚如何确保在每个阶段都将数据输入到InputBox(否则我希望弹出消息并结束输入)。我有一个MsgBox,如果没有输入任何内容,它会弹出,但我想添加一个选项,使子项保留在它所在的输入框中,以便用户仍然可以输入数据

我尝试过使用vbRetryCancel,重试将循环,然后再也不会真正取消(我必须强制outlook关闭以结束宏),或者取消将循环,再也不会重试。如果我可以这样做,在输入数据或单击“取消”之前,输入框不会前进“确定”,这也会起作用,但如果没有输入任何内容,我仍然需要一个MsgBox来提醒用户

    Sub Request_Tracking()

Dim objMsg As MailItem
Dim tasksource As String
Set objMsg = Application.CreateItem(olMailItem)

'requests input of the user with various options
tasksource = InputBox("Please select task receipt method:" & _
        vbCrLf & vbTab & "1 - Phone call" & _
        vbCrLf & vbTab & "2 - Email" & _
        vbCrLf & vbTab & "3 - Instant Message" & _
        vbCrLf & vbTab & "4 - Desk walk-up" & _
        vbCrLf & vbTab & "5 - Miscellaneous", "Option Chooser")

    'if response is blank then ends the task
    If tasksource = vbNullString Then
        MsgBox "Nothing was entered. Please re-enter your request.", vbOKOnly, "Error!"
        Exit Sub
    End If

    Select Case tasksource
        Case "1"
            tasksource = "Phone call"
        Case "2"
            tasksource = "Email"
        Case "3"
            tasksource = "Instant Message"
        Case "4"
            tasksource = "Desk walk-up"
        Case "5"
            tasksource = "Miscellaneous"
        Case Else
            tasksource = tasksource
    End Select

    'various input boxes for data needed, if response is blank then ends the task without send
    strName = InputBox("Requestor Name:")
        If strName = vbNullString Then
            MsgBox "Nothing was entered. Please reattempt your request.", vbOKOnly, "Error"
            Exit Sub
        End If
    strCoreEvent = InputBox("Task Description:")
        If strCoreEvent = vbNullString Then
            MsgBox "Nothing was entered. Please reattempt your request.", vbOKOnly, "Error"
            Exit Sub
        End If
    strUnitNum = InputBox("Number of units:")
        If strUnitNum = vbNullString Then
            MsgBox "Nothing was entered. Please reattempt your request.", vbOKOnly, "Error"
            Exit Sub
        End If
    strTime = InputBox("Processing Time:")
        If strTime = vbNullString Then
            MsgBox "Nothing was entered. Please reattempt your request.", vbOKOnly, "Error"
            Exit Sub
        End If

    'configures message being sent, sents to WFM box and formats the body font and various line breaks and then sends
    With objMsg
        .To = "tracking@test.com"
        .Subject = "Request Received"
        .HTMLBody = "<body style=font-size:11pt;font-family:Arial><b>For request tracking; please assign to me.</b>" & "<p>" & tasksource & " request from " & strName & ": " & strCoreEvent & "<br />Number of units: " & strUnitNum & "<br />Processing time: " & strTime & "</p></body>"
        .Recipients.ResolveAll
        .Send
    End With

End Sub
子请求_跟踪()
Dim objMsg作为邮件项
将tasksource设置为字符串
设置objMsg=Application.CreateItem(olMailItem)
'使用各种选项请求用户的输入
tasksource=InputBox(“请选择任务接收方式:&”_
vbCrLf和vbTab&“1-电话”和_
vbCrLf和vbTab以及“2-电子邮件”和_
vbCrLf和vbTab&“3-即时消息”和_
vbCrLf和vbTab&“4-桌上行走”和_
vbCrLf和vbTab&“5-杂项”、“选项选择器”)
'如果响应为空,则结束任务
如果tasksource=vbNullString,则
MsgBox“未输入任何内容。请重新输入您的请求。”,vbOKOnly,“错误!”
出口接头
如果结束
选择案例任务源
案例“1”
tasksource=“电话”
案例“2”
tasksource=“电子邮件”
案例“3”
tasksource=“即时消息”
案例“4”
tasksource=“桌面巡视”
案例“5”
tasksource=“杂项”
其他情况
tasksource=tasksource
结束选择
'用于输入所需数据的各种输入框,如果响应为空,则结束任务而不发送
strName=InputBox(“请求者名称:”)
如果strName=vbNullString,则
MsgBox“未输入任何内容。请重新尝试您的请求。”,vbOKOnly,“错误”
出口接头
如果结束
strCoreEvent=InputBox(“任务描述:”)
如果strCoreEvent=vbNullString,则
MsgBox“未输入任何内容。请重新尝试您的请求。”,vbOKOnly,“错误”
出口接头
如果结束
strUnitNum=InputBox(“单位数:”)
如果strUnitNum=vbNullString,则
MsgBox“未输入任何内容。请重新尝试您的请求。”,vbOKOnly,“错误”
出口接头
如果结束
strTime=InputBox(“处理时间:”)
如果strTime=vbNullString,则
MsgBox“未输入任何内容。请重新尝试您的请求。”,vbOKOnly,“错误”
出口接头
如果结束
'配置要发送的消息,发送到WFM框,格式化正文字体和各种换行符,然后发送
使用objMsg
.To=”tracking@test.com"
.Subject=“收到请求”
.HTMLBody=“对于请求跟踪,请分配给我。”&“”&tasksource&“来自”&strName&“:”&strCoreEvent&“
单位数:”&strUnitNum&“
处理时间:&strTime&“

” .Recipients.ResolveAll .发送 以 端接头
您可以尝试以下方法:

While tasksource = " "
    tasksource = InputBox("Please select task receipt method:" & _
    vbCrLf & vbTab & "1 - Phone call" & _
    vbCrLf & vbTab & "2 - Email" & _
    vbCrLf & vbTab & "3 - Instant Message" & _
    vbCrLf & vbTab & "4 - Desk walk-up" & _
    vbCrLf & vbTab & "5 - Miscellaneous", "Option Chooser", " ")
    If tasksource = vbNullString Then
        Exit Sub
    ElseIf (tasksource = " ") Then
        tasksourceCancel = MsgBox("Nothing was entered. Please re-enter your request. Or press Cancel to leave!", vbOKCancel, "Error!")
        If tasksourceCancel = 2 Then
            Exit Sub
        End If
    End If
Wend

它强制用户输入,如果用户单击“确定”,返回/默认值将为
”(空格)
将循环,如果用户单击“取消”,值将为
vbNullString
,并将退出。

尝试类似的操作

Do
    tasksource = InputBox("Please select task receipt method:" & _
            vbCrLf & vbTab & "1 - Phone call" & _
            vbCrLf & vbTab & "2 - Email" & _
            vbCrLf & vbTab & "3 - Instant Message" & _
            vbCrLf & vbTab & "4 - Desk walk-up" & _
            vbCrLf & vbTab & "5 - Miscellaneous", "Option Chooser", 1)
            If Not (tasksource >=1 And tasksource <=5) Then
                optionvar = MsgBox("Incorrect selection. Do you want to re-enter your request?", vbYesNo, "Input required")
                If optionvar = 6 Then 'if yes is pressed
                    tasksource = vbNullString
                Else
                    tasksource = optionvar
                End If
            End If
Loop While tasksource = vbNullString
Do
tasksource=InputBox(“请选择任务接收方式:&”_
vbCrLf和vbTab&“1-电话”和_
vbCrLf和vbTab以及“2-电子邮件”和_
vbCrLf和vbTab&“3-即时消息”和_
vbCrLf和vbTab&“4-桌上行走”和_
vbCrLf和vbTab&“5-杂项”、“选项选择器”,1)

如果不是(tasksource>=1和tasksource您想强制用户在inputbox中输入数据吗?@PankajJaju是的。我不确定这段代码最简单的方法是什么,但我遇到的问题是,如果我在inputbox上单击“取消”,然后单击“tasksourceCancel”仍然被调用。是否有办法在按下InputBox上的“取消”按钮时退出sub,而不是执行额外的步骤?@jnjustice,检查这是否更符合您的要求。@miguelryu我认为前面的代码更符合我的要求,因为我认为警报会更有意义,以便用户知道re是一个错误。只需添加一个“else”函数并在输入框上包括取消按钮即可?@jnjustice您仍然可以将MsgBox放在while中(在
tasksource=vbNullString
之后)来提示错误消息,您想让我举例说明吗?@jnjustice,如果(tasksource=“”)您需要放置一个
else
否则,即使
tasksource
中有值,消息也会弹出。