April 3, 2014

VBと類似したプログラミング環境について

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