VBScript「終了していない文字列型の定数です」を解消する
VBScript でプログラムを組んだとき、プログラムには何の問題もないのにコンパイルエラー「終了していない文字列型の定数です」となることがある。
そんなときは、ファイルの文字エンコーディングを確認してみるといい。
文字エンコーディングが「シフトJIS」以外 (たとえば UTF-8) だと、このエラーが発生することがある。
以下のサンプルソースを使って検証する。
サンプルソース (SayHello.vbs)
Option Explicit
MsgBox "ハローワールド"
文字エンコーディングが「シフトJIS」の場合
処理が成功し、メッセージボックスが表示される。
これが正しい動き。
文字エンコーディングがシフトJISならスクリプトは正常終了する。
![画像1](https://assets.st-note.com/production/uploads/images/63042133/picture_pc_71f36db56c11aecb69ab5292a3e575b1.png)
文字エンコーディングが「UTF-8」の場合
コンパイルエラーになる。
「終了していない文字列型の定数です。」とのこと。
文字エンコーディングがUTF-8だとコンパイルエラーになる。
![画像2](https://assets.st-note.com/production/uploads/images/63042152/picture_pc_43b95ca27b47e7bb2b41d5c536367990.png)
文字エンコーディングが「UTF-8 (BOM付き)」の場合
コンパイルエラーになる。
「文字が正しくありません。」とのこと。
行と文字が 1 なので、おそらく BOM そのものが原因なのだろう。
文字エンコーディングがUTF-8 (BOM付き) だとコンパイルエラーになる。
![画像3](https://assets.st-note.com/production/uploads/images/63042155/picture_pc_3593267a96c2a30f8b90e80797dec5ce.png)
例外:コンパイルエラーにならないこともある
たとえば、以下のプログラムだと UTF-8 にしていてもコンパイルエラーにならない。
Option Explicit
MsgBox "ハロー"
ただし実行された結果は文字化けしている。
![画像4](https://assets.st-note.com/production/uploads/images/63042184/picture_pc_9b3b9e226dbae7b726cbe8cc5bc0798e.png)
まとめ
コンパイルエラー「終了していない文字列型の定数です」が発生したら、プログラムの文字エンコーディングが「シフトJIS」であることを確認しよう。