#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
. В настоящее время у вас есть 2If
, но только 1End 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, чтобы выполнить шаг за шагом и посмотреть, как ведет себя код. Это может дать некоторое представление о происхождении вашей проблемы.