사용자가 [Cancel InputBox VBA Excel]를 선택했는지 여부를 검출하는 방법
날짜를 입력하라는 입력란이 있습니다.사용자가 확인을 누르지 않고 [취소]를 클릭하거나 입력 대화 상자를 닫는 경우 프로그램에서 중지하도록 알리는 방법은 무엇입니까?
뭐랄까if str=vbCancel then exit sub
현재 사용자는 OK 또는 Cancel 키를 누를 수 있지만 프로그램은 계속 실행됩니다.
str = InputBox(Prompt:="Enter Date MM/DD/YYY", _ Title:="Date Confirmation", Default:=Date)
사용자가 취소를 클릭하면 길이가 0인 문자열이 반환됩니다.빈 문자열을 입력하는 것과 구분할 수 없습니다.그러나 사용자 지정 InputBox 클래스를 만들 수 있습니다.
이 답변에 따라 빈 문자열과 취소를 적절히 구별하기 위해 EDIT를 사용합니다.
예를 들어맞추기
Private Sub test()
Dim result As String
result = InputBox("Enter Date MM/DD/YYY", "Date Confirmation", Now)
If StrPtr(result) = 0 Then
MsgBox ("User canceled!")
ElseIf result = vbNullString Then
MsgBox ("User didn't enter anything!")
Else
MsgBox ("User entered " & result)
End If
End Sub
기본 문자열을 삭제할 때 취소했음을 사용자에게 알리거나 취소를 클릭합니다.
http://msdn.microsoft.com/en-us/library/6z0ak68w(v=vs.90).aspx 를 참조해 주세요.
다음 예제에서는 InputBox 메서드를 사용하여 사용자 엔트리를 검증하고 시트를 숨깁니다.여기서 중요한 것은 StrPtr 내에서 랩 InputBox 변수를 사용하여 사용자가 InputBox의 'x' 아이콘을 클릭했을 때 '0'과 비교될 수 있도록 하는 것입니다.
Sub unhidesheet()
Dim ws As Worksheet
Dim pw As String
pw = InputBox("Enter Password to Unhide Sheets:", "Unhide Data Sheets")
If StrPtr(pw) = 0 Then
Exit Sub
ElseIf pw = NullString Then
Exit Sub
ElseIf pw = 123456 Then
For Each ws In ThisWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next
End If
End Sub
위의 솔루션은 InputBox-Cancel의 경우에 따라서는 동작하지 않습니다.특히 InputBox a Range를 사용해야 하는 경우에는 작동하지 않습니다.
예를 들어 다음 InputBox를 사용하여 사용자 지정 범위('sRange', 유형:=8, Set + Application 필요)를 정의하십시오.InputBox)를 누르면 다음과 같은 오류가 나타납니다.
Sub Cancel_Handler_WRONG()
Set sRange = Application.InputBox("Input custom range", _
"Cancel-press test", Selection.Address, Type:=8)
If StrPtr(sRange) = 0 Then 'I also tried with sRange.address and vbNullString
MsgBox ("Cancel pressed!")
Exit Sub
End If
MsgBox ("Your custom range is " & sRange.Address)
End Sub
이 경우 동작하는 것은 마지막에 InputBox + ErrorHandler 앞에 있는 "On Error GoTo ErrorHandler" 문뿐입니다.
Sub Cancel_Handler_OK()
On Error GoTo ErrorHandler
Set sRange = Application.InputBox("Input custom range", _
"Cancel-press test", Selection.Address, Type:=8)
MsgBox ("Your custom range is " & sRange.Address)
Exit Sub
ErrorHandler:
MsgBox ("Cancel pressed")
End Sub
그럼 문제는 오류 또는 If 문을 사용하여 StrPtr()=0 중 하나를 검출하는 방법입니다.
입력 상자가 어레이인 경우 작동하지 않습니다.먼저 배열 여부를 체크하는 것으로 해결했습니다.
Dim MyArrayCheck As String
Dim MyPlateMapArray as variant
MyPlateMapArray = Application.InputBox("Select ....", Type:=8)
MyArrayCheck = IsArray(MyPlateMapArray)
If MyArrayCheck = "False" Then
Exit Sub
End If
아래와 같은 False로 해결했습니다.
MyLLOQ = Application.InputBox("Type the LLOQ number...", Title:="LLOQ to be inserted in colored cells.", Type:=1)
If MyLLOQ = False Then Exit Sub
사용자가 취소를 클릭하면 서브가 종료됩니다.
또 다른 제안입니다.
메시지 상자를 만듭니다.inputbox
null 값을 반환합니다.예:
Dim PrC as string = MsgBox( _
"No data provided, do you want to cancel?", vbYesNo+vbQuestion, "Cancel?")
하위 TestInputBox() Dim text As String text = InputBox("Type some text") 텍스트 = "이면 MsgBox "button cancel or not typeed"이면 MsgBox 텍스트 End If End Sub
Cancel을 누르면 입력 상자가 부울 False 값을 전송합니다.
contenidoy = 응용 프로그램.InputBox("Cantidad = " ", titulox, contenidox, , , , , 유형:=1)
'ESC 또는 취소'
contenidoy = False이면 MsgBox "Cancelado" 그렇지 않으면 MsgBox "Edicion aceptada" "End If"
언급URL : https://stackoverflow.com/questions/26264814/how-to-detect-if-user-select-cancel-inputbox-vba-excel
'programing' 카테고리의 다른 글
View Model Locator란 무엇이며 Data Templates와 비교한 장점은 무엇입니까? (0) | 2023.04.09 |
---|---|
bash에 "goto"라는 문구가 있나요? (0) | 2023.04.09 |
어떤 git repo에서 (복제가 아닌) 다른 git repo로 일부 파일을 이동하는 방법 (0) | 2023.04.09 |
TabControl을 ViewModel 모음에 바인딩하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
64비트 Windows에서의 cURL 실행 (0) | 2023.04.09 |