Мне нужна помощь более опытных пользователей Excel VBA.

Обычно у меня есть 2 группы из 3 ячеек (всего 6 ячеек). Если заполнена одна группа из 3 ячеек, она должна принять ее и не возвращать окно сообщения.

Если одна из двух групп не заполнена (не заполнена) или возвращает ошибку, необходимо отобразить "сообщение об ошибке"

Две группы из 3 ячеек: (A39, A40, A41) и (E39, E40, E41)

Это в настоящее время в моей формуле:

If IsError(Range("E39, E40, E41")) Then MsgBox ("error msgbox"): Exit Sub
If Range("E39, E40, E41") = Blank Then MsgBox ("error msgbox"): Exit Sub

Как мне добавить A39, A40, A41 к этой формуле, чтобы, если либо группа 1 (A39, A40, A41) или
группа 2 (E39, E40, E41) заполнены, это не возвращает "сообщение об ошибке msgbox"?

Я попытался возиться с ним сам, но он вернул бы "ошибку msgbox", если бы не были заполнены все 6 ячеек.

Я попытался посмотреть на операторы AND, OR, но не могу получить нужную мне функцию.

Вот картинка, которая может помочь

Любая помощь будет принята с благодарностью

2 ответа2

1

У вас есть проблемы с вашим кодом. Во-первых, Range("E39, E40, E41") не относится к этим трем ячейкам. Вам нужно будет разделить их запятыми вне кавычек, так как Range("E39", "E40", "E41") .

Во-вторых, чтобы правильно оценить, являются ли эти ячейки пустыми, вам необходимо разделить их в своем операторе IF следующим образом:

If Range("E39") = "" Or Range("E40") = "" Or Range("E41") = "" Then
    'code here
End If

То же самое касается IsError:

If IsError(Range("E39")) Or IsError(Range("E40")) ...

Однако, чтобы сгруппировать логику, вам нужно думать по-другому, потому что это приведет к ошибке, когда любая из этих ячеек пуста / содержит ошибку. Итак, вы можете подумать о добавлении двух новых переменных, которые вы устанавливаете как True или False зависимости от того, правильно ли заполнена группа или нет. Пример:

Dim isFilled1 as Boolean = False
Dim isFilled2 as Boolean = False

If Not Range("E39") = "" Or Not Range("E40") = "" Or Not Range("E41") = "" Then
    'All the cells in this range contain a value so set isFilled1 to True
    isFilled1 = True
End If

If IsError(Range("E39")) Or IsError(Range("E40")) Or IsError(Range("E40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled1 to False
    isFilled1 = False
End If

If Not Range("A39") = "" Or Not Range("A40") = "" Or Not Range("A41") = "" Then
    'All the cells in this range contain a value so set isFilled2 to True
    isFilled2 = True
End If

If IsError(Range("A39")) Or IsError(Range("A40")) Or IsError(Range("A40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled2 to False
    isFilled2 = False
End If

'Now check if isFilled1 or isFilled2 are True

If isFilled1 = True or isFilled2 = True Then
    'Hooray, one of the groups is properly filled
Else
    'Neither group is properly filled; show msgbox
    MsgBox("error msgbox")
End If

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

0

Мне пришлось немного его настроить, чтобы он хорошо работал с файлом Excel, который я использовал.

Благодаря exantas (для кода) и Dave Rook (для редактирования моего поста), это окончательный код:

Dim isFilled1 As Boolean
Dim isFilled2 As Boolean

If Not Range("E39") = "" And Not Range("E40") = "" And Not Range("E41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("E39")) Or IsEmpty(Range("E40")) Or IsEmpty(Range("E41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If Not Range("A39") = "" And Not Range("A40") = "" And Not Range("A41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("A39")) Or IsEmpty(Range("A40")) Or IsEmpty(Range("A41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If isFilled1 = True Or isFilled2 = True Then
'One of the groups is properly filled
Else
'Neither group is properly filled; show msgbox
MsgBox ("error msgbox"): Exit Sub

Мне пришлось заменить формулу в ячейках E39, E40, E41, A39, A40, A41 на:

= IF(ISERROR(old_formula); "";(old_formula), чтобы при возвращении ошибки отображалась пустая / пустая ячейка).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .