Почему несколько сабвуферов не работают вместе, а работают индивидуально в VBA? - PullRequest
0 голосов
/ 23 сентября 2019

Я пишу макрос, чтобы сделать пару вещей.Моя цель - импортировать таблицу, а затем скопировать ее на 3 разных листа в одном файле.В конце концов я хочу организовать эти 4 таблицы с моими подводными лодками.Поскольку у меня есть 4 листа в файле, мне нужно написать отдельную подпункт для каждого листа.

Наконец, я хочу привести их к полному сабвуферу под названием All ().Но когда я это делаю, мой макрос заходит в бесконечный цикл.

Я попытался запустить их по отдельности, и они работали правильно.Но я не знаю, почему они не работают, когда бегают вместе.Вот мой код:

Sub Format_1()

    Sheets(1).Range("H2") = "P Axial"

    Dim delete_list(7) As String

    delete_list(0) = "Absolute Distance"
    delete_list(1) = "V2"
    delete_list(2) = "V3"
    delete_list(3) = "T"
    delete_list(4) = "U1 Plastic"
    delete_list(5) = "U2 Plastic"
    delete_list(6) = "U3 Plastic"
    delete_list(7) = "R1 Plastic"

    i = 1

    Do While Sheets(1).Cells(2, i) <> ""

        If IsInArray(Sheets(1).Cells(2, i), delete_list) Then
            Columns(i).EntireColumn.Delete
            i = i - 1
        End If

        i = i + 1
    Loop

End Sub

Sub All()

    Call Format_1
    Call Format_2
    Call Format_3
    Call Format_4

End Sub

Этот код будет выполняться для 4 разных листов одинаково.Единственное изменение будет Листами (2), Листами (3), Листами (4) вместо Листов (1).

Я хотел бы знать, почему они не работают вместе, а работают по отдельности.Заранее спасибо.

PS: IsInArray - это функция, которая проверяет, видна ли строка в массиве.

1 Ответ

0 голосов
/ 23 сентября 2019

Вам нужно использовать листовые ссылки для работы макроса, потому что он по умолчанию будет активным, но активным будет все, что у вас будет при запуске макроса.

Попробуйте это.

Sub Format_1()

    Sheets(1).Range("H2") = "P Axial"

    Dim delete_list(7) As String

    delete_list(0) = "Absolute Distance"
    delete_list(1) = "V2"
    delete_list(2) = "V3"
    delete_list(3) = "T"
    delete_list(4) = "U1 Plastic"
    delete_list(5) = "U2 Plastic"
    delete_list(6) = "U3 Plastic"
    delete_list(7) = "R1 Plastic"

    i = 1

    Do While Sheets(1).Cells(2, i) <> ""

        If IsInArray(Sheets(1).Cells(2, i), delete_list) Then
            'I added the Sheet reference, but do this for all of your macros
            Sheets(1).Columns(i).EntireColumn.Delete 
            i = i - 1
        End If

        i = i + 1
    Loop

End Sub

Sub All()

    Call Format_1
    Call Format_2
    Call Format_3
    Call Format_4

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