器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBScript】文字コードの違いに気づかずドツボにハマった話


プログラムを書いたことのある人であれば、何かしらでドツボにハマってしまったことが1度はあるのではないでしょうか。

今回は私がドツボにハマった、しょうもない失敗を紹介します。

あの時の私は、VBScriptで「Microsoft Accessのマクロを実行する」プログラムを書いていました。

※タスクスケジューラーを使って定期実行させたかったんですよね。

その時のソースコードがこんな感じです。

'変数定義
Dim AcApp
    Set AcApp = CreateObject("Access.Application")
Dim AcDB
    AcDB="ファイルパス"
 
'データベースを起動
AcApp.visible = true
AcApp.OpenCurrentDatabase AcDB
WScript.Sleep 5000
 
'マクロを実行
AcApp.Application.Run "マクロ名"
WScript.Sleep 5000
 
'データベースを閉じる
AcApp.Quit
set AcApp = Nothing

実行すると........

はい。出ました。

私をドツボにハメたエラーメッセージが(笑)。
ソースコードの9行目なので、この部分のエラーですね。

AcApp.OpenCurrentDatabase AcDB

エラー原因の候補は、(ざっくりいうと)以下の3つです。

①指定したファイルが存在しない。

  ↑何度確認しても問題なし。

②ファイルパスが間違っている。

  ↑こちらも同じく問題なし。

③他の人が開いている。

  ↑自分のデスクトップに置いているのでそんなはずもなく。

④指定したファイルのファイル形式が適切でない。

  ↑ファイル形式「.accdb」なので問題なし。

………はい。行き詰りました(笑)。

その後、1時間近くPCとにらめっこをしましたが、ドツボから抜け出すことはできませんでした……。

翌日、改めてソースコードを見返している時、偶然にもエラーの原因を発見しました。

PC画面右下のこの部分です(テキストエディタVSCodeを使っています)。

ご理解いただけたでしょうか?

文字コードが「UTF-8」になっています!!

………そりゃエラーが出るはずですよね……。

UTF-8で書いた「テスト.accdb」
・Shift-JISで書いた「テスト.accdb」

人間の目には同じに見えてもPCからしたら別物ですからね。

Microsoft Office製品は、標準設定で文字コードがShift-JISになっています。

こんな初歩的なミスに気付かず、1時間も無駄にしてしまいました……。

皆さんは、こんなかっこ悪いミスをしないように気を付けてくださいね。