2015-12-03 3 views
0

У меня есть код, который вставляет текст во вновь вставленную строку после того, как он запрашивает у пользователя ввод текста в InputBox. Проблема заключается в том, что если пользователь выбирает отмену на InputBox, код все равно будет работать, и он будет вставлять новую строку и записывать FALSE в столбец E. Если ничего не введено и я нажимаю OK, тогда он будет правильно выйти из функции , Однако, как я могу сделать так, чтобы он выходил из функции, когда пользователь нажимает на отмену?Как выйти из функции, если пользователь отменяет или не вводит что-либо во входное поле

Public Function ContactAdd() As Long 
Dim cF As Range 
Dim Response As String 

With Worksheets("Database").Range("B:B") 
'Find the cell in column B containing value in combobox 
Set cF = .Find(What:=Worksheets("Database").ComboBox1, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 

'If cell in column B is found 
If Not cF Is Nothing Then 
    'Open inputbox 
    Response = Application.InputBox("Enter contact name") 
    'If inputbox is cancelled, exit function 
    If Response = "" Then 
     MsgBox "Invalid - Exiting" 
     Exit Function 
    Else 
    'If entry to inputbox is made, insert row below the combobox value that was found and paste response into column E of the row that was inserted 
    cF.Offset(1, 0).EntireRow.Insert 
    ContactAdd = cF.Offset(1, 0).Row 
    Worksheets("Database").Cells(ContactAdd, 5).Value = Response 
    End If 
    Exit Function 
End If 
End With 

ContactAdd = 0 
End Function 

Private Sub InsertContact1_Click() 
'Execute ContactAdd function when button is clicked 
ContactAdd 
End Sub 

Эта часть моего кода, поэтому неправильно, и я не знаю, почему ... Я попытался с помощью vbNullString вместо «», а также которые не помогло.

If Response = "" Then 
     MsgBox "Invalid - Exiting" 
     Exit Function 

ответ

2

проблема в том, что Application.InputBox не совпадает с «нормальным» InputBox. Поэтому, если вы используете:

Response = InputBox("Enter contact name") 
'If inputbox is cancelled, exit function 
If Response = "" Then 
    MsgBox "Invalid - Exiting" 
    Exit Function 
End If 

все будет работать. Если вы хотите использовать Application.InputBox вместо этого, вы должны изменить оператор IF в:

If Response = False Then 

, но в этом случае вы должны определить ответ как вариант.

+0

Отлично, спасибо! – Chris

0

Application.InputBox() возвращается False на Отмена, в то время как InputBox() возвращается "". См. Интерактивную справку.

Попробуйте это в открывшееся окно:

? (InputBox("Click cancel") = "") 

? (Application.InputBox("Click cancel") = False) 

Оба возвращают Правда на кнопку Отмена.

Смежные вопросы