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 语句,但我认为这不会成为问题。
所以我是新手!!!我已经使用了记录宏功能,然后在需要时进行扩展。我需要帮助的是让我的输入框需要输入文本。如果它的空白有错误消息,并且它到 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 语句,但我认为这不会成为问题。