VBA Макросы Для каждой ошибки условия ячейки

#excel #vba #for-loop #each

Вопрос:

Я хотел бы обратиться за помощью с приведенными ниже кодами.

Первое условие «ЕСЛИ» работает хорошо, но условие «ИНАЧЕ», в котором я хотел бы пропустить функцию копирования и вставки первого условия и продолжить цикл, не работает и выдает мне сообщение об ошибке, которое выглядит следующим образом: введите описание изображения здесь

Заранее благодарю вас! больше власти тебе будет!

 Sub IF_Loop3()

    Dim cell As Range
    For Each cell In Range("TablePrac[Animals]")
        If cell.Value <> "NULL" Then
            cell.Offset(0, -3).Value = cell.Value
            
        Else
        If cell.Value = " " Then
        Exit For
        
        End If
        
    Next cell

End Sub
 

Комментарии:

1. по-прежнему не работает, он только копирует значение «» пробел в целевую ячейку

2. ElseIf cell.Value = " " Then (упс)

3. Пишите If cell.Value = " " Then и Exit For в той же строке, чтобы вам не нужно было писать другую End If . В настоящее время у вас есть 2 If , но только 1 End If , поэтому компилятор считает Next cell , что они находятся внутри первого If оператора, тем самым выдавая вам сообщение об ошибке.

4. Еще одна ячейка. Значение = «» Затем Выход Для завершения, ЕСЛИ Следующая ячейка выглядит так? тем не менее, он копирует пробел «» в координаты 0, 3 🙁

5. Чтобы было ясно, вы хотите выйти из цикла , если cell.Value = " " , и выполнить эту строку cell.Offset(0, -3).Value = cell.Value , если значение не "NULL" («NULL» =/= пустая ячейка) правильно ?

Ответ №1:

 For Each cell In Range("TablePrac[Animals]")
        If cell.Value <> "NULL" Then
            cell.Offset(0, -3).Value = cell.Value
            
        Else If cell.Value = " " Then
             Exit For
             End If ' If cell.Value = " "
        End If 'If cell.Value <> "NULL" <= you forgot this one!
    Next cell
 

Ответ №2:

Новый код, основанный на вашем объяснении:

 Sub IF_Loop3()
    Dim cell As Range
    For Each cell In Range("TablePrac[Animals]")
        If (cell.Value <> "NULL") and (cell.Value <> " ") Then
            cell.Offset(0, -3).Value = cell.Value
        End If
    Next cell
End Sub
 

У вас есть два условия для выполнения копирования/вставки: value <> "NULL" и value <> " " . Вам просто нужно проверить эти два условия If , чтобы оба они были соблюдены.

Если вы напишете Exit For , это означает, что цикл прервется, и ваш код будет продолжен с первой строки после цикла, а не со следующей итерацией цикла.

Комментарии:

1. Тоже не работает, но я действительно ценю вашу помощь. Спасибо вам 🙂

2. Я предполагаю, что этот код не работает иначе, чем ваш код не работал? Если да, то какое сообщение об ошибке или проблеме вы получаете сейчас?

3. тем не менее, он копирует «» (значение пробела) в точку (0, -3)

4. Вы уверены, что это " " (только 1 пробел), а не "" (пустая строка) или, может быть, несколько пробелов ? Он будет иметь тот же визуальный рендеринг (в ячейке ничего не написано), но будет обрабатываться по-другому в коде.

5. @DamonSolidor Попробуйте добавить точку останова в If , откройте окно «Локальные переменные» (доступно на вкладке «Просмотр»), запустите код с помощью F5 и просматривайте значение ячейки каждый раз, когда среда выполнения достигает точки останова. Если значение равно " " , нажмите F8, чтобы выполнить шаг за шагом и посмотреть, как ведет себя код. Это может дать некоторое представление о происхождении вашей проблемы.