Интегрировать массив в подпрограмму в Excel VBA - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в vba и пытаюсь создать подпрограмму, которая будет выполнять ту же операцию копирования и вставки для 5 рабочих книг.

Я пытаюсь сделать это, создав массив, содержащий всеиз окон, для которых должна выполняться функция, как показано ниже:

Sub Copyinforevised()
Dim i As Integer
Dim z As Integer
i = 1
z = 5
Dim wb(i To z) As Window
wb (1): Set wb1 = Windows("Chariot OPS project workbook.xlsx")
wb (2): Set wb2 = Windows("Chariot RAN project workbook.xlsx")
wb (3): Set wb3 = Windows("Chariot AT project workbook.xlsx")
wb (4): Set wb4 = Windows("Chariot OSS project workbook.xlsx")
wb (5): Set wb5 = Windows("Chariot MOB project workbook.xlsx")
For i = 1 To z
    Windows(wb(i)).Activate
[function to be done to the workbook]
Next i
End Sub

Но когда я пытаюсь запустить макрос, я получаю ошибку "запрошено выражение константы ошибки компиляции"

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вот рабочий синтаксис:

Sub Copyinforevised()
Dim i As Integer
Dim z As Integer
Dim wb

i = 1
z = 5

ReDim wb(i To z) As Window

Set wb(1) = Windows("Chariot OPS project workbook.xlsx")
Set wb(2) = Windows("Chariot RAN project workbook.xlsx")
Set wb(3) = Windows("Chariot AT project workbook.xlsx")
Set wb(4) = Windows("Chariot OSS project workbook.xlsx")
Set wb(5) = Windows("Chariot MOB project workbook.xlsx")
End Sub

Обратите внимание на использование ReDim.

0 голосов
/ 04 марта 2019

Вместо установки набора Workbook переменных (что, безусловно, является способом сделать это), вы можете поместить имена ваших книг в массив и использовать их для циклического просмотра:

Sub Copyinforevised()
Dim wbList() As Variant
wbList = Array("Chariot OPS project workbook.xlsx", "Chariot RAN project workbook.xlsx", _
    "Chariot AT project workbook.xlsx", "Chariot OSS project workbook.xlsx", _
    "Chariot MOB project workbook.xlsx")

Dim i As Long
For i = LBound(wbList) To UBound(wbList)
    With Workbooks(wbList(i))
        ' Do whatever with the workbook
        Debug.Print .Sheets(1).Range("A1").Value
    End With
Next i

End Sub

(И просто обратите внимание, что эти рабочие тетради должны быть открыты.)

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