よろずやネット

最近はLibreofficeにハマっています。

Dim args()

Quick Tour(クイックツアー)の続き
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Bridge/Automation_Bridge

'**** 前回は、ここから ****
Dim objServiceManager As Object
objServiceManager=CreateObject("com.sun.star.ServiceManager")

Dim objDesktop As Object
objDesktop= objServiceManager.createInstance("com.sun.star.frame.Desktop")
'******* ここまで作成 ****

そして次は下記の文章だ。
'Open a new empty writer document
Dim args()
Set objDocument= objDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, args)

いつも通り、Visual Basic .Net風に書き換えて、前回までのプログラムに追加する。
Dim args() As Object
objDocument= objDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, args)

そして、ラン。
TypeMismatchエラー発生。そうか型が違うのか。
Dim args() As Object の As Objectを削除して再トライ。

SharpDevelopからは、「定義にAs…がない」ぞと、警告が出るが無視。
やはり、TypeMismatchエラー発生。

Webサイトで調べてみよう。

あった、あった。
やはり私と同じことをしようとしていた先輩たちがいらっしゃった。
http://www.oooforum.org/forum/viewtopic.phtml?p=285802

そして、ここのリンクで、最も有用な情報を発見。
http://www.oooforum.org/forum/viewtopic.phtml?t=44760

その有用な情報とは、Dim args() を作成してくれるファンクションを発見したのだ。

Public Function MakePropertyValue(ByVal cName As String, ByVal uValue As Boolean) As Object
    Dim oStruct, oServiceManager As Object
    oServiceManager = CreateObject("com.sun.star.ServiceManager")
    oStruct = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    oStruct.Name = cName
    oStruct.Value = uValue
    MakePropertyValue = oStruct
End Function

で、Dim args()は、こんな感じになる。
Dim args(4) As Object
args(0) = MakePropertyValue("ReadOnly", True)
args(1) = MakePropertyValue("Password", "secret")
args(2) = MakePropertyValue("Buttons", False)
args(3) = MakePropertyValue("Overwrite", False)

------------

viewtopic.phtml?t=44760 は結構やりたいことを網羅してるぞ!簡単に見つかって、ラッキー!