Novellが出してる派生OpenOfficeはVBA互換だが、本家オリジナルはVBAと完全な互換性はないので、めんどくせーなーと思いつつOOoBasicで書き直した。
※会社にはNovellのでいいじゃんと訴えたが、派生はダメなんだと。
OOoBasicはVBAとちがって圧倒的にサンプルが少ない。
今回は連想配列に苦労した。
VBAの連想配列も、あまりスマートではないが、エクセル版は「Collection」を使っていた。
Dim aName As New Collection aName.Add 1, Cells(1, 1).Value
OpenOfficeでどうやろうかとググったがなかなかない。
頭をかかえていると、VBA向けのCreateObjectを使う連想配列を見つけた。
VBで連想配列
CreateObject で 外部APIを呼ぶ・・・
ということは、OpenOfficeがCreateObjectを使えればいいわけか。
で、ググったが出てこない。OpenOfficeのhelpを探したら、あった!
'UNO オブジェクトを作成します。Windows では、OLE オブジェクトも作成できます。 'このメソッドにより、パラメータとして渡されるタイプのインスタンスが作成されます。 '構文: oObj = CreateObject( type )
で、やってみたら・・・
できました。できましたよ。ふーーつかれた。
REM ***** BASIC *****
Option Explicit
Sub Macro1
' 宣言部
Dim oSheet As Object
Dim oCell As Object
Dim oObj As Object
' 初期化
oSheet = ThisComponent.Sheets(0)
oObj = CreateObject("Scripting.Dictionary")
oCell = oSheet.getCellByPosition(1,1)
' もし配列キーが存在したら
If oObj.Exists(oCell.getString) = True then
oObj.Remove(oCell.getString) ' 削除して
oObj.Add(oCell.getString,5) ' 作成
Else
oObj.Add(oCell.getString, 1) ' 作成
End If
' 値を入れる
oSheet.getCellByPosition(2,1).String = oObj.Item(oCell.getString)
MsgBox "完了しました"
End Sub
まーこうしてすこしずつでも使えるようになれば、いつかは使いこなせるさ。
免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。
子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記
コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫
良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ