VBA InputBox 需要用户输入详细信息如果不循环回自己

VBA InputBox need user to enter details if not loop back on itself

所以我是新手!!!我已经使用了记录宏功能,然后在需要时进行扩展。我需要帮助的是让我的输入框需要输入文本。如果它的空白有错误消息,并且它到 return 到消息框,如果取消新的 sheet 被删除并返回到开头。这是我正在处理的内容。

Sub SAVE_TEMP_MAR()
'
' SAVE_TEMP_MAR Macro
'

'
    Sheets("JP PRN.").Select
    Sheets("JP PRN.").Copy Before:=Sheets(4)
    Sheets("JP PRN. (2)").Select
    Sheets("JP PRN. (2)").Name = ("TEMPORARY MAR")
    ActiveWindow.SmallScroll Down:=-21
    Range("A1:AF18").Select
    Selection.ClearContents
    Range("AG1").Select
    Sheets("Blank MAR").Select
    Range("A1:AF18").Select
    Selection.Copy
    Sheets("TEMPORARY MAR").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("Blank MAR").Select
    Range("AG1").Select
    Sheets("TEMPORARY MAR").Select
    Sheets("TEMPORARY MAR").Name = InputBox("Enter new name for the MAR." & vbNewLine & vbNewLine & "Please use Resident initials and name of Medication ")
    Range("AG1").Select

提前致谢

编辑:我只是想到一个边缘情况,如果用户在什么都不输入后尝试取消,可能会陷入无限循环,我测试后会更新它。 经过适当的测试,事实证明这不是问题。

通过使用变量和 if-statements 您将能够检查这些情况。

以下代码可以通过很多优化(录制的宏包含很多缓慢且无用的代码)但是没有原始工作簿我不会尝试优化它,然而它应该做你需要的:

Sub SAVE_TEMP_MAR()
'
' SAVE_TEMP_MAR Macro
'
    Dim userInput As String
    'Moving the InputBox up here so that if the user cancelles nothing happens.
retry:
    userInput = InputBox("Enter new name for the MAR." & vbNewLine & vbNewLine & _
                         "Please use Resident initials and name of Medication ")
    If StrPtr(userInput) = 0 Then
        'User cancelled, exit this subroutine
        Exit Sub
    ElseIf userInput = vbNullString Then
        'Input is empty, so go back to retry
        MsgBox ("You have to enter a new name!")
        GoTo retry
    End If
    Sheets("JP PRN.").Select
    Sheets("JP PRN.").Copy Before:=Sheets(4)
    Sheets("JP PRN. (2)").Select
    Sheets("JP PRN. (2)").Name = ("TEMPORARY MAR")
    Range("A1:AF18").Select
    Selection.ClearContents
    Range("AG1").Select
    Sheets("Blank MAR").Select
    Range("A1:AF18").Select
    Selection.Copy
    Sheets("TEMPORARY MAR").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("Blank MAR").Select
    Range("AG1").Select
    Sheets("TEMPORARY MAR").Select
    Sheets("TEMPORARY MAR").Name = userInput
    Range("AG1").Select

End Sub

基本上这会将用户输入保存到一个变量中,然后用两个 if 语句检查它是否没有被取消并且不为空,然后它才会继续。我使用 this answer 作为添加它的模板。

另请注意,通常不赞成使用 GoTo 语句,但我认为这不会成为问题。