Как использовать макрос из надстройки Excel? - PullRequest
0 голосов
/ 07 марта 2019

Я начинаю программировать в Excel VBA, и я хочу сделать следующее:

1) Когда я открываю новый файл Excel (пустой), я импортирую надстройку Excel

2) Затем я хочу использовать макрос, реализованный в этой надстройке (в модуле)

3) Эта надстройка в основном объединяет несколько листов Excel (по указанному пути) в один (тот, где я запускал макрос) Примечание: работает, когда не используется как надстройка, то есть, когда используется отдельно

4) Когда я запускаю следующий код в пустом файле Excel, он не помещает туда другие рабочие листы. Он просто открывает первый найденный файл Excel, и больше ничего не происходит.

Вы знаете, какую ошибку я делаю? Спасибо за совет :).

Sub GetSheets()

Path = "C:specified path\"
Filename = Dir(Path & "*.xlsx")

Do While Filename <> ""

    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True

    For Each Sheet In ActiveWorkbook.Sheets
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
    Next Sheet

    Workbooks(Filename).Close
    Filename = Dir()

Loop

End Sub

1 Ответ

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

Если вы запускаете код из надстройки, ThisWorkbook ссылается на файл надстройки, но я думаю, что вы хотите объединить все в вашем первом ActiveWorkbook как место назначения.

Sub GetSheets()
    Dim fPath As String, fName As String
    Dim destWB As Workbook, currentWB As Workbook
    Dim i As Long

    Set destWB = ActiveWorkbook
    fPath = "C:\specified path\"
    fName = Dir(fPath & "*.xlsx")
    Do While fName <> ""
        Set currentWB = Workbooks.Open(Filename:=fPath & fName, ReadOnly:=True)
        For i = 1 To currentWB.Sheets.Count
            currentWB.Sheets(i).Copy After:=destWB.Sheets(destWB.Sheets.Count)
        Next i
        currentWB.Close SaveChanges:=False
        fName = Dir()
    Loop
End Sub

Я предлагаю не использовать внутренние имена, такие как «Лист» или «Имя файла», для своих переменных, поэтому я изменил их имена.

Если вы всегда копируете за первым листом, порядок листов изменяется. Поэтому я изменил его, чтобы добавить в конце вместо этого.

Поскольку Sheets также включает листы с диаграммами, в этом случае это лучший выбор, чем Worksheet. Чтобы зациклить их, я предлагаю использовать счетчик, так как там нет Sheet объекта.

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