Я пытаюсь автоматизировать процесс, в котором я:
- Открыть файл
- Изменить некоторые значения на основе другого файла
- Выполнить макрос
- Закрыть файл
Проблема в том, что данный макрос использует плагин Capital IQ.Макрос работает просто отлично, когда я сам открываю Excel, но выдает ошибки, когда я открываю Excel через VBScript.Я знаю из различных результатов Google, что CreateObject не загружает надстройки должным образом.Однако в результатах не указано, что делать, если надстройка состоит из файла .xll и файла .dll, и я недостаточно знаком с VB, чтобы понять, как это сделать.Когда я открываю список установленных надстроек для Excel (после открытия самого Excel), отображаются соответствующие C:\Program Files\Capital IQ\Office Plug-in\CIQAddin.dll
и C:\Program Files\Capital IQ\Office Plug-in\ciqfunctions.xll
.
Популярное онлайн-решение, похоже, добавляет функцию, котораяпереключает каждое дополнение
Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean
Dim CurrAddin As Excel.AddIn
For Each CurrAddin In TheXLApp.AddIns
If CurrAddin.Installed Then
CurrAddin.Installed = False
CurrAddin.Installed = True
End If
Next CurrAddin
End Function
Но когда я попытался добавить это, оно все равно дало мне ошибку.
Ниже приведен пример того, как выглядит мой VBScript.
sFolder = "C:\SomeFolderPath\"
sMacro = "C:\SomeFilePath.xlsm"
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile in objFSO.GetFolder(sFolder).Files
If UCase(objFSO.GetExtensionName(oFile.Name)) = "XLS" Then
src_file = objFSO.GetAbsolutePathName(oFile)
macro_file = objFSO.GetAbsolutePathName(sMacro)
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
Dim mBook
Set mBook = oExcel.Workbooks.Open(macro_file)
mBook.Sheets("input").Range("A1:A500").Value = oBook.Sheets(1).Range("A1:A500").Value
oBook.Close False
oExcel.Run mBook.name & "!Module1.myMacro"
mBook.Close False
oExcel.DisplayAlerts = False
oExcel.Quit
MsgBox("Done with file " & oFile.Name & "!")
End if
Next
Общие замечания по улучшению производительности / аккуратности кода также приветствуются.