Visual Basicに類似したプログラミング環境
VBは、コンパイルによってアプリケーションを作成できる独立したプログラミング言語ですが、Windowsでは類似した文法を持つ言語が目的に応じて用意されています。これらは類似しているとはいえ、それぞれに違いがあり、コードをそのまま相互に移し替えてもエラーが発生してしまいます。この記事では、言語環境を変えるときに、どのような違いがあり、どうすればよいのか、を示します。
まず、VBからHTMLの順番に並べて、特徴や違いを示します。
略称 | VB | VBA for Excel, Word... | VBScript | HTA | HTML |
名称 | Visual Basic | Visual Basic for Application | Visual Basic Scripting Edition | HTML Application | HyperText Markup Language |
ファイル形式 | .exe, .dll等 | アプリケーションのファイルに埋め込まれることが多い。 | .vbs, .wsf 中身はテキストファイル。 |
.hta 中身はテキストファイルで、html+αの文法で記述。 |
.htm, .html 中身はテキストファイル。 |
利用される場面 | コンパイルして単独で利用できる普通のアプリケーションを作成 | 対応するアプリケーション上での操作の自動化 | 従来のコマンドラインでは困難な複雑なバッチ処理。 | 簡素なアプリケーション。 GUIを持つバッチ処理。 |
Webページのデータ。Scriptタグ中にVBScriptを記述できる。 |
実行環境 | - | Excel, Word... (対応するアプリケーション) |
Cscript.exe Wscript.exe |
mshta.exe | Internet Explorerなど各種Webブラウザ |
ルートオブジェクト | - | Excel Applicationオブジェクト, Word Applicationオブジェクト... |
WScriptオブジェクト | - | windowオブジェクト (ブラウザのウィンドウを示す) |
型宣言 | ○ | ○ | × | × | × |
言語環境を変えるときの留意点
まず、言語ごとに、実行される環境が異なります。そうすると、暗黙の内に定義されているルートオブジェクトが異なってきます。そのため、明示せずにつかえていたプロパティやメソッドを使用すると、「オブジェクトがありません。」というエラーを発生させてしまいます。
また、言語仕様が違いますので、言語によっては存在しない命令文があります。ここでは型宣言について示しましたが、 VBやVBAで型を宣言したプログラムをVBScript環境に持ってくるとAs節は認識されず、エラーとなります。
以下で、エラーが発生する例とその理由を示します。
' NG Dim target As Range 'Asは使えない。 Set target = Range("A1") 'Excel.Application.Rangeではなく、WScript.Rangeを参照しようとしている。 'OK Dim xl, target 'Variant型として宣言。型は自動的に調整される。 set xl = WScript.CreateObject("Excel.Application") Set target = xl.Range("A1") 'Rangeにルートオブジェクトを指定してやる。
'NG Dim xl Set xl = WScript.CreateObject("Excel.Application") 'mshtaの実行環境はWScriptではない。 Echo("Hello World!") 'EchoはVBScriptの関数ではない。WScriptのメソッド。 ''OK Dim xl Set xl = CreateObject("Excel.Application") 'CreateObjectはVBSCriptの関数なのでWScriptはいらない。 MsgBox "Hello World!" 'MsgBoxはVBScriptの関数なので使える。
VBA の機能で VBScript に含まれていない機能http://msdn.microsoft.com/ja-jp/library/cc392401.aspx
CreateObject メソッドhttp://msdn.microsoft.com/ja-jp/library/cc364399.aspx
CreateObject 関数http://msdn.microsoft.com/ja-jp/library/cc410215.aspx
Echo メソッドhttp://msdn.microsoft.com/ja-jp/library/cc364402.aspx
MsgBox 関数http://msdn.microsoft.com/ja-jp/library/cc410277.aspx
No comments :
Post a Comment