Как выйти из подпрограммы, если значение текстового поля пользовательской формы пусто или если строка находится в списке диапазонов - PullRequest
0 голосов
/ 20 февраля 2019

Я изо всех сил пытался понять это, несмотря на использование многих рекомендаций и вариантов, которые я нашел в Интернете.Я хочу выйти из подпрограммы, если пользователь забыл ввести значение или если это значение можно найти в диапазоне строк, это относится к пользовательской форме.

Вот самый последний из многих вариантов, которые яя пробовал для предложения IF:

Private Sub cmd_nProj_Click()
    Dim wb As Workbook
    Dim ws As Worksheet, ws_h As Worksheet
    Dim i_rc As Long
    Dim r_home As Range, r_ProdName As Range




    Set wb = Application.ThisWorkbook
    Set ws_h = wb.Sheets("Control")

    i_rc = ws_h.Cells(Rows.Count, 1).End(xlUp).Row

    Set r_home = ws_h.Range("A" & i_rc + 1)
    Set r_ProdName = ws_h.Range("N2:N30")
    If Me.tb_NewProjName = "" Or r_ProdName.Find(What:=Me.tb_NewProjName.Value, LookIn:=xlValues) Is Nothing Then
        MsgBox ("Either you have left the projection name blank or the projection name is already being used, please try again!")
        Exit Sub

    End If
end sub

Другие варианты Я бы получил объект с блочной переменной не установлена ​​ошибка, и в этой итерации предложение if работает неправильно в этом, даже когда текстовое полезначение появляется в этом диапазоне, предложение if пропускается.

Заранее спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

, даже если значение текстового поля появляется в этом диапазоне, предложение if пропускается.

Это потому, что вы выходите из подпрограммы, когда вы не найти значение в диапазоне.Я добавил Not, чтобы исправить это.

Private Sub cmd_nProj_Click()
    Dim wb As Workbook
    Dim ws As Worksheet, ws_h As Worksheet
    Dim i_rc As Long
    Dim r_home As Range, r_ProdName As Range




    Set wb = Application.ThisWorkbook
    Set ws_h = wb.Sheets("Control")

    i_rc = ws_h.Cells(Rows.Count, 1).End(xlUp).Row

    Set r_home = ws_h.Range("A" & i_rc + 1)
    Set r_ProdName = ws_h.Range("N2:N30")
    If Me.tb_NewProjName = "" Or Not (r_ProdName.Find(What:=Me.tb_NewProjName.Value, LookIn:=xlValues) Is Nothing) Then
        MsgBox ("Either you have left the projection name blank or the projection name is already being used, please try again!")
        Exit Sub

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