Проверка выбранного пользователем диапазона или отмены - PullRequest
2 голосов
/ 21 марта 2012

У меня есть следующий код, который предлагает пользователю выбрать диапазон ячеек.

У меня возникают трудности с проверкой, является ли диапазон действительным (то есть они просто вводят число в поле ввода?) Илиесли они нажали отмену.Как я могу дифференцироваться?

Do While (True)    
    Dim mInput As Range
    mInput = Application.InputBox(Prompt:="Please select the cells.", Type:=8)
    If (mInput Is Nothing) Then
        Exit Sub
    End If

    If (mInputRange.Columns.Count <> 1) Then
        MsgBox "There must be only one column selected.", vbOKOnly
    Else

    End If

Loop

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Хотя код mkingston работает (и я проголосовал), я думаю, что предпочтительнее проверить на Nothing, а затем вернуться к обработчику ошибок.Затем код может перейти к действию или выбрать другой путь, а не возобновлять обработку ошибок после ошибок (что я оставляю за проблемами, которых нельзя ожидать)

Sub test()
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox("Please select the cells", Type:=8)
On Error GoTo 0
If Not rng Is Nothing Then
    If rng.Columns.Count <> 1 Then
        MsgBox "There must be only one column selected.", vbOKOnly
    Else
        'do stuff
    End If
Else
    MsgBox "User either cancelled range selected or selected an invalid range", vbCritical
End If
End Sub
3 голосов
/ 21 марта 2012

Excel вызывает ошибку до того, как результат будет возвращен, если его невозможно преобразовать в диапазон. Попробуйте сделать это самостоятельно.

Кроме того, я предполагаю, что вы уже делаете это, но вам нужно будет использовать

set mInput = Application.InputBox(Prompt:="Please select the cells.", Type:=8)

вместо

mInput = Application.InputBox(Prompt:="Please select the cells.", Type:=8)

Если вы нажмете «Отмена», то также возникнет ошибка, что означает, что вам нужно использовать какую-то процедуру проверки ошибок:

Sub test()

    On Error GoTo handler

    Dim rng As Range

    Set rng = Application.InputBox("a", Type:=8)

    Debug.Print rng.Address

    Exit Sub

handler:
    Select Case Err.Number
        Case 424
            MsgBox "Cancelled.", vbOKOnly + vbInformation, "Cancellation dialog"
        Case Else
            Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
    End Select

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...