Проблема цикла Vba в listobject(таблица excel)
Привет,
У меня есть проблема в моем цикле for. Я хочу перебрать каждую строку excel в моей таблице excel и найти значение в определенном столбце, когда я найду значение, которое я редактирую в 25-м столбце этой строки.
Для этого я написал код VBA. Но когда я запускаю его, цикл for не заполняет ячейки одну за другой. Я прикрепил снимок экрана моих колонок, когда запускал макрос.
Заранее спасибо.
Ссылка на скриншот : Ссылка[^]
Edit: я обнаружил, что таблица содержит 156 строк, но в цикле for после 86-й строки значение ячейки становится пустым. Почему это так?
Что я уже пробовал:
Private Sub FindAndReplaceButton_Click() Dim s As String s = WorkCommandNumbersInputField.Value Dim wcns() As String wcns = Split(s, ",") Dim wrksht As Worksheet Dim objListObj As ListObject Dim objListRows As ListRows Set wrksht = Application.ActiveSheet Set objListObj = wrksht.ListObjects(1) Set objListRows = objListObj.ListRows Dim rowCount As Integer rowCount = objListRows.Count For Each wcn In wcns For i = 1 To rowCount Dim FindedRow As Range Set FindedRow = objListObj.ListRows(i).Range Dim FindedCell As Range Set FindedCell = FindedRow.Cells(i, 2) If FindedCell.Value = wcn Then Dim ChangedCell As Range Set ChangedCell = FindedRow.Cells(i, 25) If (ChangedCell.Value = "") Or (ChangedCell.Value = "---") Then ChangedCell.Value = ShelfNumberInputField.Value ElseIf ChangedCell.Value <> ShelfNumberInputField.Value Then ChangedCell.Value = ChangedCell.Value + "-" + ShelfNumberInputField.Value End If End If Next i Next End Sub
Graeme_Grant
любая причина, по которой вы просто не используете встроенный Excel If(...)
функция в 25-м столбце каждой строки?
Onur ERYILMAZ
Потому что если функция всегда устанавливает ячейку "False" или "Empty", то то, что я хотел сделать, если условие не соответствует, ничего не делает. Таким образом, встроенная функция if не предлагает в противном случае ничего не делать.
Graeme_Grant
Тогда вы не понимаете Excel. Например:
=IF(B7>15, "Big", "Small")
Если B7 = 10, то ячейка будет содержать "маленький", если B7 = 20, то ячейка будет содержать "большой".
Вы можете сделать еще один шаг вперед и использовать ссылку на ячейку для состояний true/false:
=IF(B7>15, D4, C4)
Onur ERYILMAZ
Но проблема в том, что я не хочу писать "маленький", я хочу это =IF(B7>15, "Большой", в противном случае оставьте ячейку незатушенной)
Graeme_Grant
Тогда используйте нулевую строку, просто!
Onur ERYILMAZ
Мне не нужна нулевая строка восьмерки.
Graeme_Grant
Тогда удачи. Я дал вам гораздо более простое решение, чем вы пытаетесь реализовать сами. Это то, о чем вы просили, это то, что вы получили.
Onur ERYILMAZ
Ты мне ничего не дал ;)
Richard MacCutchan
Да, он это сделал, но, похоже, вы не понимаете основ VBA.
ZurdoDev
=Если(B7>15, "Большой", "")
Это оставит камеру нетронутой.
Graeme_Grant
Спасибо. Он не понимает, что пустая ячейка-это нулевая строка. Сомневаюсь, что он вообще пытался это сделать.
Pat O'Brien
но ячейка с формулой не является нулем, даже если она возвращает нулевую строку.
Саб тест()
Дим ГСЧ в диапазоне
Set rng = [testcell]
Отлаживать.Выведите "x+CellValue+x", "имеет формулу", "IsNull", "Формула"
Отлаживать.Выведите "x" & [testcell] & "x", rng.HasFormula, IsNull(rng), rng.Формула
Конец Подводной Лодки
Запустите вышеописанное и вы получите:
x+CellValue+x имеет формулу IsNull Formula
xx True False =IF(G7>G8,"big", "")
ZurdoDev
Отладьте свой код. Тогда вы точно увидите, что происходит.