我正在考虑从 Excel 切换到 Open Office(实际上是 Lotus Symphony)。
我有许多带有 VBA 宏的 Excel 文件,它们连接到 CAD、CAM 和其他应用程序以及我自己的 COM 对象。
该函数GetObject
在 Open Office Basic 中不存在,但我能够创建一个使用GetObject
脚本对象函数的函数。
问题是我可以访问该对象的某些属性/方法,但不能访问其他对象。
下面有一个示例,它连接到 Excel,获取ExcelApp.Workbooks.Count
属性,并在尝试获取ExcelApp.Workbooks(I).Name
属性时崩溃。在此示例中,我使用 Excel 作为外部应用程序,只是因为它很常见且易于理解。
我注意到 Open Office VBA IDE 比 Excel VBA IDE 更差:无法更改变量的值、计算表达式、更改当前语句、没有智能感知等。
难道因为它是 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