Построение XLA из исходного кода программно

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

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

Спасибо,

Ник

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

1 ответ

Я использую очень простой макрос 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.

Другие вопросы по тегам