Excel VBA: Как мне правильно настроить мой L oop? - PullRequest
0 голосов
/ 30 марта 2020

Short:

У меня есть рабочая книга с флажками и поворотной таблицей. После обновления сохраненные данные будут перенесены на другой лист. Кроме того, когда флажок установлен, он получит статус «Истина» и также будет обновлен.

После обновления сводной таблицы «статья» затем удаляется из сводной таблицы.

Проблема:

Когда я установлю для первого флажка значение «True», следующая статья в последовательности будет каким-то образом пропущена.

Все остальные будут в порядке.

Когда я установлю 1-е, 3-е и 6-е, оно пропустит одинаковое количество строк, поэтому 2 будет пропущено. 4 и 5 и 7,8,9

Ожидаемый результат: Я не хочу пропустить строки.

Если флажок равен true, обновить статус до true, затем refre sh pt. go к следующей статье.

Мне не нужен флажок ложного результата.

Мысли:

Полагаю, мой l oop как-то не зацикливается должным образом, потому что я установил некоторый код за его пределами. Я не знаю, где именно.

Дополнительно:

Я относительно новичок в VBA и еще не научился генерировать чистый код. Да, я создал нечетную переменную флажка.

Обновление: Я понял, что эта часть делает все go ape. нет необходимости в refre sh после каждого цикла. Да, в конце полного цикла должен быть refre sh.

'Set active checkbox to false
If Blad4.OLEObjects(cb).Object.Value = True Then
Blad4.OLEObjects(cb).Object.Value = False
'Refresh Pivot table
Blad4.PivotTables("PT_EXCESS").PivotCache.Refresh
End If

Если кто-то будет любезен, чтобы помочь мне разобраться

Я не могу понять, как выйти из моего l oop. Да, я могу "сделать до". и "выход для".

Но я не знаю, какой код нужно заменить, потому что, Для каждой статьи в РНГ. заставляет весь код работать :(.

Sub status()

    Dim tbl As ListObject
    Dim FoundCell As Range
    Dim LookupValue As String
    Dim Article As Range
    Dim rng As Range

    Set rng = Blad4.Range("A4:A13")

    For Each Article In rng
    LookupValue = Article

    Set tbl = Blad2.ListObjects("PQ_ABC_EXCESS")

    On Error Resume Next
    Set FoundCell = tbl.DataBodyRange.Columns(1).Find(LookupValue, LookAt:=xlWhole)
    On Error GoTo 0

    If Not FoundCell Is Nothing Then

    FoundCell.Offset(, 16).Value = Article.Offset(, 4)

    cbnr = Article.Row - 3
    cb = "Checkbox" & cbnr

    Else
    MsgBox "Value not found"
    End If

    If Blad4.OLEObjects(cb).Object.Value = True Then
    FoundCell.Offset(, 17).Value = Blad4.OLEObjects(cb).Object.Value
    Else
    End If

    'Set active checkbox to false
    If Blad4.OLEObjects(cb).Object.Value = True Then
    Blad4.OLEObjects(cb).Object.Value = False
    'Refresh Pivot table
    Blad4.PivotTables("PT_EXCESS").PivotCache.Refresh
    End If

    Next Article

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...