業務を行う際、21世紀らしからぬ(全員で裏紙に記入する)作業があります。
この下らない行為を、Excelのマクロで改善してしまえ! と思い
マクロを作成することに。
ところが、社内のPCを見るとExcelのライセンスが不足しており、Excelと
OpenOfficeCalcが混在状態。 両方の2本立てでスタートしたのですが、
レイアウトの食い違いが出たりするため
OpenOfficeCalcのみ(インストールされていないPCにもインストールしろ と言う強行策)
で行うことにしました。
OpenOfficeのマクロは作成した経験が無く、かなり手探り状態でした。
試しにA1のセルを選択し、"A"を入力しただけを記録するとこんな感じです。
'OOoBasic REM ***** BASIC ***** sub Main rem ---------------------------------------------------------------------- rem define variables dim document as object dim dispatcher as object rem ---------------------------------------------------------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ---------------------------------------------------------------------- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$A$1" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) rem ---------------------------------------------------------------------- dim args2(0) as new com.sun.star.beans.PropertyValue args2(0).Name = "StringName" args2(0).Value = "A" dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2()) rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array()) end sub
ちょっと愕然としました。 "dim" や "as" と言った見慣れたものはあるものの、
毎回1個だけのobject型の配列を宣言しなきゃならないのかよ・・・と。
(サンスターってハミガキか? とか)
調べてみると、結構VBAと互換性を持たせているようで、こんな感じで
同じことが出来ることがわかりました。
'OOoBasic sub Main ThisComponent.Sheets(0).getCellByPosition(0,0).String = "A" end sub
これぐらいであれば、何とかいけそうな雰囲気です。