MsgBox не появляется при задании нескольких аргументов в инструкции If / Then

#excel #vba

#excel #vba

Вопрос:

Когда я выбираю ячейку C1, если A1 пуста, я хочу, чтобы появилось окно сообщения. Хотя на самом деле ничего не происходит (также нет сообщения об ошибке). Мой синтаксис неправильный или я делаю это неправильно?

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "C1" And Range("A1") Is Nothing Then
        MsgBox "Please fill out previous fields to continue"
    End If

End Sub

  

Ответ №1:

Попробуйте:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "$C$1" And Range("A1").Value = "" Then 'or IsEmpty(Range("A1"))
        MsgBox "Please fill out previous fields to continue"
    End If

End Sub
  

Target.Address вернет $C$1 — так что это необходимо там. И Is Nothing не используется для определения, является ли ячейка пустой — это было бы IsEmpty() или .Value = "" Is Nothing используется больше для определения, было ли Object Set .

Ответ №2:

Range("A1") возвращает Range объект, представляющий ячейку в A1 — этого никогда не будет, Nothing потому что A1 всегда будет существовать как ячейка.

Вы можете And IsEmpty(Range("A1")) посмотреть, имеет ли это значение.

Ответ №3:

Попробуйте это

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$C$1" And Len(Range("A1")) = 0 Then
        MsgBox "Please fill out previous fields to continue"
    End If
End Sub
  

Ответ №4:

Это должно сработать для вас:

Частный вложенный Worksheet_SelectionChange (по умолчанию используется как диапазон)

 If Target.Address(False, False) = "C1" And IsEmpty(Range("A1")) = True Then
    MsgBox "Please fill out previous fields to continue"
End If
  

End Sub