Объединение нескольких операторов тогда, когда есть один оператор IF - PullRequest
0 голосов
/ 24 января 2019

По сути, это продолжение ранее заданного вопроса (ref: Как скопировать все имена листов на конкретный лист в той же книге? ), на который я получил ответ, но после добавления еще одного утверждения я застрялс двумя проблемами: 1) С порядком текущих операторов он показывает только, как будто он выполнил код для одного листа, а не для столбцов, но иногда, когда я пытаюсь смешать операторы If, это работает, что странно.Таким образом, вопрос: имеет ли значение порядок здесь и если да, то в каком порядке, если он должен прийти?2) Поскольку операторы IF одинаковы для всех, я бы хотел их объединить, но не знаю, возможно ли это вообще. Вот код:

Sub passport_combining ()

With ThisWorkbook.Sheets("MainSheet")
    For Each wsheet In ThisWorkbook.Sheets
        If wsheet.Name <> "MainSheet" Then

            Set nextEntry_FTE_quantity = .Cells(.Rows.Count, "K").End(xlUp).Offset(1, 0)
            Set nextEntry_nonrecurring_expenses = .Cells(.Rows.Count, "S").End(xlUp).Offset(1, 0)
            Set nextEntry_initiative_type = .Cells(.Rows.Count, "Q").End(xlUp).Offset(1, 0)
            Set nextEntry = .Cells(.Rows.Count, "G").End(xlUp).Offset(1, 0)

            If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry.Value = wsheet.Name
            If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry_FTE_quantity.Value = wsheet.Range("BH16").Value
            If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry_initiative_type.Value = wsheet.Range("K8").Value
            If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry_nonrecurring_expenses.Value = wsheet.Range("BH17").Value


        End If
    Next wsheet
End With

Спасибо!

1 Ответ

0 голосов
/ 25 января 2019

Обновленный ответ для циклического прохождения worksheets

Возможно, вы столкнулись с проблемой не установки переменных.Приведенный ниже код будет перебирать ВСЕ worksheets в вашем workbook, исключая ваш worksheet "MainSheet"

, который я добавил в Debug.Print wsheet.Name только для того, чтобы увидеть цикл, работающий в ближайшем окне.Не стесняйтесь удалить эту строку.

Sub passport_combining()

    Dim wsheet As Worksheet

    For Each wsheet In ThisWorkbook.Sheets
            If wsheet.Name <> "MainSheet" Then

                Set nextEntry_FTE_quantity = Cells(Rows.Count, "K").End(xlUp).Offset(1, 0)
                Set nextEntry_nonrecurring_expenses = Cells(Rows.Count, "S").End(xlUp).Offset(1, 0)
                Set nextEntry_initiative_type = Cells(Rows.Count, "Q").End(xlUp).Offset(1, 0)
                Set nextEntry = Cells(Rows.Count, "G").End(xlUp).Offset(1, 0)

                If IsError(Application.Match(wsheet.Name, Range("G:G"), 0)) Then
                    nextEntry.Value = wsheet.Name
                    nextEntry_FTE_quantity.Value = wsheet.Range("BH16").Value
                    nextEntry_initiative_type.Value = wsheet.Range("K8").Value
                    nextEntry_nonrecurring_expenses.Value = wsheet.Range("BH17").Value
                End If

            End If
            Debug.Print wsheet.Name
    Next wsheet


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