Вызов макроса в другой книге - PullRequest
0 голосов
/ 16 марта 2012

У меня есть макроситуация, которая немного сложна, поэтому я приложу все усилия, чтобы выложить ее. Он включает в себя взаимодействие между 3 различными файлами книги:

  • первый содержит общие макросы анализа данных и форматирования
  • второй, содержащий параметры, информацию о форматировании и более конкретные макросы для анализа данных такого типа
  • третий файл, содержащий фактические данные, которые должны быть отформатированы

Рабочий процесс, который я представляю, выглядит следующим образом: общий лист загружается, и выбираются файл данных и параметров, и общие макросы запускаются для применения некоторого базового форматирования. Затем из файла параметров следует запустить открытый макрос с определенным именем и списком аргументов (например, Sub SpecialFormatting(wbk As Workbook)), чтобы выполнить более конкретное форматирование файла данных, который не является частью общего листа.

Как мне указать, из какой рабочей книги запускать макрос? Я думаю, что где-то читал о Application.Run, но я думаю, что он может передавать только аргументы ByVal. Мне нужно было передать рабочую книгу ByRef, чтобы иметь возможность ее редактировать.

Полагаю, для этой конкретной ситуации я мог бы передать строку с именем книги данных, но есть ли другой вариант?

1 Ответ

0 голосов
/ 16 марта 2012

Не самый большой поклонник Excel и VB, вынужденный работать с ним в прошлом. Мне пришлось приложить немало усилий для написания макросов Excel, чтобы автоматизировать то, что мне неинтересно было выполнять вручную. Я понял это не так давно для экспорта рабочих книг в отдельные файлы:

Set wbSource = ActiveWorkbook

wrkshtYear = Mid(wbSource.FullName, Len(wbSource.FullName) - 7, 4)

For Each sht In wbSource.Worksheets
    If sht.Name <> "Totals" Then
        newFileName = Replace((strSavePath & "\" & UserNameWindows() & sht.Name & wrkshtYear), " ", "")
        If isFileExist(newFileName & ".xlsx") = False Then
            sht.Copy
            Set wbDest = ActiveWorkbook
            wbDest.SaveAs newFileName
            wbDest.Close 'Remove this if you don't want each book closed after saving.
        End If
    End If
Next

Может быть, это поможет вам начать. Гудлак!

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