Как передать массив имен рабочих листов в VBA Sheets.Copy? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть этот код, который заполняет массив именами листов, при условии:

Dim lng_Counter As Long    
Dim arr_wks() As Variant

lng_Counter = 1

For Each wks In ThisWorkbook.Worksheets
    If Left(wks.Name, 2) = "Hi" Then
        ReDim Preserve arr_wks(lng_Counter)
        arr_wks(lng_Counter) = wks.Name
        lng_Counter = lng_Counter +1
    End if
Next wks

Затем я хотел бы скопировать эти листы в новую книгу, поэтому я попробовал что-то вроде этого:

Sheets(arr_wks()).Copy

Что не работает.Единственный способ заставить его работать - выписать:

Sheets(Array(arr_wks(1),arr_Wks(2),...)).Copy

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

Как передать массив в аргумент типа Sheets (arr) .Copy?

1 Ответ

0 голосов
/ 28 февраля 2019

В результате вы получите ошибку, в которой первый элемент (с индексом ноль) будет пустым.

Это можно исправить с помощью

lng_Counter = 0

или

ReDim Preserve arr_wks(1 to lng_Counter)

или

Option Base 1

сверху.

...