ExcelからOpenOffice(実際にはLotus Symphony)に切り替えることを検討しています。
CAD、CAM、その他のアプリケーション、および自分のCOMオブジェクトに接続するVBAマクロを含むExcelファイルがたくさんあります。
Open Office Basicにはこの機能GetObject
はありませんがGetObject
、スクリプトオブジェクトの機能を利用した機能を作ることができました。
問題は、そのオブジェクトの一部のプロパティ/メソッドにはアクセスできますが、他のプロパティにはアクセスできないことです。
以下に、Excelに接続してExcelApp.Workbooks.Count
プロパティを取得し、プロパティを取得しようとするとクラッシュする例を示しExcelApp.Workbooks(I).Name
ます。この例では、Excelが一般的で理解しやすいという理由だけで、外部アプリケーションとして使用しています。
Open OfficeVBAIDEはExcelVBAIDEよりも劣っていることに気づきました。変数の値を変更したり、式を評価したり、現在のステートメントを変更したり、インテリセンスを使用したりすることはできません。LotusSymphonyで
あるため、非常に単純ですか。別のバージョンのOpenOfficeをインストールすると、状況は改善されますか?
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