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 ペコッ
