VBA - Вложенный цикл не работает - PullRequest
0 голосов
/ 25 июня 2018

Я собираю быстрый скрипт для компиляции некоторых данных из таблицы в более «загружаемый» формат.У меня есть тройной цикл For для циклического перебора 6 рабочих листов, просматривая имена «кластеров» в диапазоне A2: A100 и выбирая номера ветвей в каждом «кластере» в диапазоне, определенном ниже как H1, J1, L1 и т. Д.

Код компилируется, но не пропускает пустые ячейки.Если найден пустой номер ветви, я бы хотел, чтобы скрипт перешел к следующему кластеру, и если будет найден пустой кластер, чтобы он перешел на следующий лист, пока он не завершит просмотр всех 6.

Данные, которые я хотел бы выводить по столбцам: Имя кластера |Скидка |Номер ветви, и мой скрипт в настоящее время возвращает все три поля, когда номер ветви считается пустым, когда его следует пропустить!Я надеюсь это имеет смысл.Мой код ниже - не могли бы вы взглянуть и сообщить, что случилось?

Sub Clusterise()

Dim WSCount, Sheet As Integer
Dim Counter, CCounter As Integer

Dim Clusters, C As Range
Dim Branches, B As Range

Counter = 0

WSCount = ActiveWorkbook.Worksheets.Count

For Sheet = 2 To WSCount

    Set Clusters = Worksheets(Sheet).Range("A2:A100")
    Set Branches = Worksheets(Sheet).Range("H1, J1, L1, ...etc. up to BN1") 'Too long to display it all

    CCounter = 1

    For Each C In Clusters

        If Not IsEmpty(C) Then

        For Each B In Branches

            If Not IsEmpty(B.Offset(CCounter, 0)) Then

            Sheets("Clusterisor").Range("A1").Offset(Counter, 0) = C.Value
            Sheets("Clusterisor").Range("B1").Offset(Counter, 0) = C.Offset(0, 5).Value
            Sheets("Clusterisor").Range("C1").Offset(Counter, 0) = B.Offset(CCounter, 0).Value

            Counter = Counter + 1

            End If

            Next B

        CCounter = CCounter + 1

        End If

    Next C

Next Sheet

End Sub

1 Ответ

0 голосов
/ 25 июня 2018

TLDR:

Изменить If Not IsEmpty(C) Then на If C <> "" Then


IsEmpty () MSDN :

Возвращает aЛогическое значение, указывающее, была ли инициализирована переменная.Синтаксис - IsEmpty (выражение) Обязательный аргумент выражения - это вариант, содержащий числовое выражение orstring.Однако, поскольку IsEmpty используется для определения того, инициализируются ли отдельные переменные, аргументом выражения чаще всего является имя одной переменной.Примечания: IsEmpty возвращает True, если переменная неинициализирована или явно установлена ​​в значениеEmpty;в противном случае возвращается False.False всегда возвращается, если выражение содержит более одной переменной.IsEmpty возвращает только значимую информацию для вариантов.

В чем разница между IsNull, IsEmpty, = Empty и пустой строкой, т. Е. "", И почему я могу использовать варианты


IsEmpty () следует использовать только для проверки инициализации переменной.Что это значит?В VBA после объявления переменной без слова New она не инициализируется.Проверьте это:

Public Sub TestME()

    Dim a As Range            'Declaring the variable
    Debug.Print IsEmpty(a)    'True

    Set a = Range("A1")       'Initializing the variable
    Debug.Print IsEmpty(a)    'False

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