2014年05月01日

失われしVBA

いやね、昔からオープンオフィス系はいろいろ期待してましてね。
でもまあどれもまず間違いなく無理だったのがVBAなんです。
(COMエディタ+言語みたいなものなので、無理なのは当たり前なんですが)

個人的な希望で言えばWin32APIやVarPtr、さらにCOMなんかを全サポートしてくれれば
最高なんですが、それはさすがに高望み。それはWindowsしか出来ないこと。

でもねぇ。

Msgbox "Hello?"

この程度すら、2、3年前のオープンオフィスは出来ませんでした。
LibreかOpenか、どちらかが落ちて、どちらかが関数が存在しませんエラー。

だからもう端から期待してなかったんですが、
LibreOfficeの設定に、「Excelのマクロを実行する」みたいなのがあって。

これ、つまりですね、「俺はそれぐらい動かせる」って自信でしょ?…本気?

で、やってみたら・・・

test0.png

おお!動いた!
これは…もしかしてやってみる価値はある?

じゃあ次だ。これは出来るかな?

Sub test()
 dim wb as workbook
 set wb = thisworkbook
 msgbox wb.worksheets.count
End Sub

実に簡単ですが、少なくともExcelのCOMはサポートしないと動きません。
さあどうだ?

test.png

おお、ちゃんと返した!まさかここまで進化してるとは!

ならWin32API抜きかつCOM抜きのVB6でどうだ?
Sub test2()
 ' ブートフォルダ直下にある全ファイル検索
 dim fnm$,ret$
 fnm = dir("/boot/",31)
 do
  if fnm= "" then exit do
  if fnm = "." then goto nd
  if fnm = ".." then goto nd
 
  ret = ret & fnm & vbcrlf
 
  nd:
  fnm = dir()
 loop

 msgbox ret
End Sub

test2.png

うおお!ここまで!ラピュタは本当にあったんだ!

じゃあ本番。適当にLibreOfficeの情報を書き出して保存。
Sub test3()
 dim xl as excel.application
 dim wb as workbook
 dim ws as worksheet
 set xl = application
 set wb = xl.workbooks.add()
 set ws = wb.worksheets(1)
 
 ws.range("A1").value = "情報"
 ws.range("A2").value = "ブック数":ws.range("B2").value = xl.workbooks.count
 ws.range("A3").value = "シート数":ws.range("B3").value = wb.worksheets.count
 ws.range("A4").value = "アプリケーション名":ws.range("B4").value = xl.name
 
 wb.saveas "~/test.xls"
 wb.close
End Sub

test3.png

おおー、でけたでええええ

なるほど、その自信のほどはよく分かった。よく頑張った。
でもアプリケーション名「Microsoft Excel」はワロタ。偽装すんなw

と、それなりに興奮したんですが、案の定制約が結構ある。

APIコール系はアウト。VarPtrも不可。
 これは仕方ない。
 
他COMは呼べない。作れない。
 dim xl as New Excel.Application
 こんなのも不可。どうも自プロセス限定ぽい。
 CreateObjectも当然不可。

インテリセンスが使えない
 これが正直一番痛い。サポートしてない関数結構あるっぽいのに
 使えるかどうかも分からない。

Debug不可
 ブレークポイントは可能。ウォッチも可能。
 でもイミディエイトウィンドウが無い。変なの。

結論として、当たり前ですが、COMではなく、
エクセルマクロエミュレーターってのが一番近そう。
でも、「もしかしたら2、3年前に落ちてたのは
Windowsで動かしてたから?」って思うぐらいには良くできてる。

インテリセンス使えるようになったら、
これだけでもLinuxにする価値はあるかもしれません。
(そんな評価するのは私ぐらいでしょうが)
posted by Nick at 06:38| Comment(0) | TrackBack(0) | Linux
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/94938554

この記事へのトラックバック