programing

사용자가 [Cancel InputBox VBA Excel]를 선택했는지 여부를 검출하는 방법

megabox 2023. 4. 9. 21:18
반응형

사용자가 [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

사용자가 취소를 클릭하면 서브가 종료됩니다.

또 다른 제안입니다.

메시지 상자를 만듭니다.inputboxnull 값을 반환합니다.예:

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

반응형