Построение XLA из исходного кода программно - PullRequest
1 голос
/ 19 октября 2010

У меня есть папка (с управлением версиями) экспортированных компонентов надстройки VBA (т. Е. Много cls , frm , frx , bas и txt файлы).Может кто-нибудь дать мне сценарий сборки (может быть сценарий VB или что-то более сложное), который берет имя этой папки и создает (рабочий) XLA?

Я знаю, что вы можете программно изменять файлы XLA ( например, этот вопрос ), поэтому не составит труда написать сценарий, который создает пустой XLA, а затем перебирает все файлы.в папке, чтобы добавить их к нему ...?

Спасибо,

Ник

(редактировать: Excel 2003, если это имеет значение)

1 Ответ

0 голосов
/ 19 октября 2010

Я использую очень простой макрос VBA в книге Excel, чтобы сделать по сути то же самое, только у меня нет форм, и у меня есть некоторая информация о модульном тесте в форматированных текстовых файлах. Поскольку VBA очень похож на VBScript, а в приведенном ниже коде используются файловая система и объектная модель Excel, которые должны быть доступны для VBScript, возможно, это будет полезно для вас.

Это выдержка из модуля .bas. Я помещаю его в пустую книгу, а затем помещаю текстовые файлы в любой каталог, в котором находится эта книга, и затем запускаю импорт. Должно быть довольно легко переназначить его для чего-то более формального, будь то надстройка, предназначенная для другой, недавно созданной книги или сценария, которая выполняет полную сборку вне Excel:

'...

Private fs_ As FileSystemObject

'...

Private Sub import_()
    On Error GoTo EH

    Set fs_ = New FileSystemObject

    Call importTests_(Application.ThisWorkbook, Application.ThisWorkbook.path)
    Call importCode_(Application.ThisWorkbook, Application.ThisWorkbook.path)

    Exit Sub

EH:
    Debug.Print "Error in import_: " & Err.Number
End Sub

'...
'stuff about importing tests ignored...
'...

Private Sub importCode_(wbk As Workbook, folderName As String)
    Dim folderObj As Folder
    Set folderObj = fs_.GetFolder(folderName)

    Dim fileExt As String

    Dim fileObj As File
    For Each fileObj In folderObj.Files
        fileExt = fs_.GetExtensionName(fileObj.name)

        If fileExt = "bas" Or fileExt = "cls" Then
            Call wbk.VBProject.VBComponents.Import(fileObj.path)
        End If
    Next fileObj
End Sub

'...

Я не знаю, какие проблемы возникают при импорте форм, поскольку я никогда не использую их в Excel.

...