Проблемы работы с COM-объектом в Open Office Basic
Я подумываю перейти с Excel на Open Office (фактически на Lotus Symphony).
У меня есть много файлов Excel с макросами VBA, которые подключаются к CAD, CAM и другим приложениям, а также к моим собственным COM-объектам.
Функция GetObject
не существует в Open Office Basic, но я смог сделать функцию, которая использует GetObject
функция скриптового объекта.
Проблема в том, что я могу получить доступ к некоторым свойствам / методам этого объекта, но не к другим.
Ниже приведен пример, который подключается к Excel, получает ExcelApp.Workbooks.Count
свойство, и падает, когда он пытается получить ExcelApp.Workbooks(I).Name
имущество. В этом примере я использую Excel в качестве внешнего приложения только потому, что оно распространено и легко для понимания.
Я заметил, что Open Office VBA IDE хуже, чем Excel VBA IDE: невозможно изменить значение переменной, вычислить выражение, изменить текущий оператор, не использовать intellisense и т. Д.
Это так просто, потому что это Lotus Symphony, и установка другой версии Open Office станет лучше?
Это так просто, потому что это VBA, и использование другого языка, такого как Python, станет лучше?
Вот код:
Код:
Public ExcelApp As Object
Sub Test
GetRunningExcel
If ExcelApp Is Nothing Then
MsgBox "Excel is not running"
Else
Dim S As String, I As Integer, N As Integer
N = ExcelApp.Workbooks.Count
For I = 1 To N
S = S & Chr(10) & ExcelApp.Workbooks(I).Name
Next I
S = "Excel has " & N & " open documents" & S
MsgBox S
End If
End Sub
Function GetRunningExcel()
Dim oleService
Dim VBScript
Dim S as string
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")
VBScript= oleService.createInstance("MSScriptControl.ScriptControl")
VBScript.Language = "VBScript"
S = S + "Public O" + Chr(10)
S = S + "Set O = GetObject(, ""Excel.Application"")" + Chr(10)
On Error Resume Next
VBScript.ExecuteStatement(S)
Set ExcelApp = VBScript.CodeObject.O
On Error Goto 0
End Function