Построение 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.