見出し画像

XOJOであそぼう - 03. できることをまとめてみる

あそぼうと言っても、ね。

Xojoであそぼうといわれても、どうせまた覚えなおすことがたくさんあるんでしょ?面倒ですよね。

でもほぼマクロなんですよ。文法は覚えなおすところは極小です。

そのくせ、VBAマクロではできなかったこともできたりします。そうしたところはマクロから乗り換えようというポイントになるかな、と思うので挙げていこうと思います。

なお、個人的に「これってどうなの…」というところも挙げていきます。面倒だなーとか、気になったところということですね。

マイナスととらえるようならVBAのほうがいいかもしれません。

よさそうなところ

オブジェクト指向である

いや、それならVB.NETがあるよ、と言われるかもしれませんし、VBAだってクラスくらいはつくれます。

でもXojoもクラスもインターフェースもつかうことができます。VBAにはないでしょ?インターフェース。

VBAでもそれっぽいものはつくることができると思いますが、面倒ですよね。

例外処理がTry-Catch-Finallyになってる

On Error Goto ~というエラーになったときのためのものをVBAでは書きますが、たいていはウェブ上の情報から(あるいは書籍から)コピペしているのでサブルーチンの一番最初あたりに書いてますよね。それに、一番最後のあたりにラベルを書いて、

If Err.Number <> 0 Then
  # なにかエラーを表示とか
End If

といったようにしますよね。

XojoではVB.NETをはじめ、ほかのプログラミング言語のようにTry~Catch~Finallyを使うことができます。

エラーになりそうなところはTryブロックの中に書きます。エラーが起きた時にすることをCatchブロックへ。

エラーが起きようがなにしようがすることはFinallyブロックへ書けばいいのです。

そうすると、ファイルが開きっぱなしとかExcelブックを開きっぱなしとかいうことがなくていいです。

COMが利用できる

いわゆるVBAでいうところの「CreateObject」ができます。

VBAだと、

 Dim o As Object
 Set o = CreateObject("InternetExplorer.Application")
 o.Visible = True
 o.Navigate "https://www.google.co.jp/"

というところが

 Dim o As OleObject
 Dim p(1) As Variant
 o = New OleObject("InternetExplorer.Application", True)
 o.Value("Visible") = True
 p(1) = "https://www.google.co.jp/"
 o.Invoke("Navigate", p)

というように同じ雰囲気で書いていくことができます。

これはWindows環境ではかなり大きいのではないでしょうか。

外部プロセスを起動できる

VBAでもShell関数を使えば余裕ですが、XojoではShellクラスを利用することで実行ファイルなどを起動することができます。

使い勝手としてはWSHのWScript.Shellのほうが近いような気がします。それは起動したプロセスの入出力を取り出すことができるためです。

JSONを扱うことができる

VBAでは苦労するJSONですが、Xojoでは標準でJSONを扱うクラスが用意されています。

このため、文字列にしたりオブジェクトにしたりというのがかなり簡単に利用できるようになっています。

break、continueをつかうことができる

ほかのプログラミング言語に慣れた方が「あれ?」と思ってしまうのがこれではないでしょうか。

ループからの脱出やループの継続に利用したいのに、VBAにはループの継続(スキップ)が存在しないので条件構文をつかって制御しますよね。

しかしXojoにはこれらがありますので、もっと直感的に利用できます。

ネイティブライブラリを利用できる

VBAにとどまる理由として、Win32APIを利用しているとか外部のネイティブdllを利用しているとかあると思います。

XojoでもWindowsではdllを、ほかではsoファイルを利用することができます。

いままでのツールで利用していたiniファイル、使いたいでしょ?

特定のデータベースか、ODBCでデータベース連携することができる

OracleやMySQLなど、一般的にビジネス利用されているデータベースには最初から連携するためのクラスが用意されています。

それぞれのライブラリを見つけてきてダウンロードして、使い方を調べて…といったことから解放されます。

それだけでも十分便利だと思いますよ。

スレッドを利用できる

マクロではこのあたりはExcelなどホストしているアプリケーション次第というところがありますが、Xojoではサーバーアプリケーションもつくることができるのでスレッドの利用が可能になっています。ここまでくると、そんなのVBAマクロでやってねぇよ!と言われそうですが。

Arrayコマンドは型を指定して一次配列を作成できる

VBAではArrayで作成した配列はVariant型になりますが、Xojoでは型を指定しておくことができます。

少し厳密に配列定義ができるのはいいですね。

これってどうなの、というところ

使ってみて、不思議に思うところもいくつかあります。これが気持ち悪いと思うようなら…慣れましょう!

MsgBox関数はコンソールアプリでも使える

非常に不思議な感覚なのですが、コンソールアプリでもMsgBox関数が利用できてしまいます。

出力される雰囲気はVBAの「Debug.Print」やWSHの「WScript.Echo」というところでしょう。

便利なような、気持ち悪いような。

もちろん、標準出力へWriteLineすることもできますので好みの問題かもしれません。

VB定数がない

当たり前なんですが、改行コードを指定するために「VbCrLf」の代わりは何だろう、と探してみました。

VBAしてい(る|た)方で一番なじみがあるのはChr関数によるものでしょうか。まったく同じように利用できます。

他には「EndOfLine」クラスのプロパティを利用することで環境ごとの改行コードが得られます。

例えばEndOfLine.WindowsはChr(13) + Chr(10)つまりCrLfとなります。

Join関数がない

文字列配列をカンマで結合した文字列をつくって…なんてCSVつくるときによく使うのがJoin関数ですよね。

Xojoにはありません。代わりにTextクラスにあるJoinメソッドを利用します。

 dim s() as Text
 s = Array("aaa","bbb","ccc")
 MsgBox Text.Join(s,"-")

これで「aaa-bbb-ccc」と表示されます。

ところで、「ん?」と不思議に思われた方がいるかもしれません。Textという型で配列を指定しています。

このJoinメソッドはTextオブジェクトの配列を引数にとります。そのためそのようにしているのです。

Textクラスがある

VBAではString型の変数が文字列を扱うものでした。一方、XojoではStringを便利にしたTextクラスを使います。

もしStringのものでText型を受け付けるメソッドを利用したいときは「toText」メソッドを利用するとText型のオブジェクトを返してくれます。

なんとも言えない不思議な感じです。

もちろん、数値を文字列にするだけならCStr関数があります。

コンソールアプリの標準出力で日本語が文字化けする

ほかで試していないのでわかりませんが、おそらくWindowsだけのはず。

1から10までを表示するようなものなら気にもなりませんが、10回「こんにちは!」と表示させるようなものを作って実行すると文字化けします。

これはXojoがUnicodeを基本としているためのようです。

文字コードを変更したらうまくいくのかもしれませんが、ファイルに出力したほうが便利かもしれません。

Round関数がない

これもVBAマクロ内で計算するときに利用したであろう関数ですが、Xojoにはありません。

代わりにRoundメソッドがあります。

ところが筆者が最初に面食らったのは、小数第何位までという指定を引数にわたすことができないというものです。

「あれー、そんなわけないだろ…」と思ったのですが、公式ドキュメントを見ると次のようにして使ってねと書いてありました。

 Dim d as Double = 1.253
 MsgBox Cstr(Round(d * (10^2)) / (10 ^2) )

なんという違和感でしょう…こういったものをメソッドとして用意しておくといいよ、ということのようです。

最後に

今回はよいところ、気になるところの両方をピックアップしてみました。まだ使いはじめなのでそれほど突っ込んだ内容にはできませんでしたが…

次はもう少し踏み込めるといいな、というところでお開きです。

この記事が気に入ったらサポートをしてみませんか?