【EXCEL VBA】【windows】システムエラーメッセージ出力

Windows定義のシステムエラーメッセージ一覧が欲しくなったので、メッセージテーブルリソースから指定範囲のシステムエラーメッセージを出力するExcelマクロを作成。
※vba上から、FormatMessage関数(windows API)を利用

■検索範囲

FormatMessage関数のdwMessageIdの定義であるDWORD型分を全てなめられるように

0(0x0)~DWORD(0xFFFF)までの可変値とした。

■結果

出力結果は、ファイル出力とワークシート表示の2種類とした。

これでちょっと、エラーメッセージが知りたい時にすばやく対応できそうだ。

ただ、最大検索可能範囲を指定して動かしてみたが、時間がかかりすぎ。。

終わらない。。

DWORD(0xFFFFFFFF)は10進換算で42,9496,7295

vbaの処理が遅いということもあるけど、さすがに42億回なめまわすのは大変だ。

DWORD FormatMessage(
DWORD dwFlags,      // 入力元と処理方法のオプション
LPCVOID lpSource,   // メッセージの入力元
DWORD dwMessageId,  // メッセージ識別子
DWORD dwLanguageId, // 言語識別子
LPTSTR lpBuffer,    // メッセージバッファ
DWORD nSize,        // メッセージバッファの最大サイズ
va_list *Arguments  // 複数のメッセージ挿入シーケンスからなる配列
);

「FormatMessage.zip」をダウンロード

——

出力例

0x00000000 この操作を正しく終了しました。
0x00000001 ファンクションが間違っています。
0x00000002 指定されたファイルが見つかりません。
0x00000003 指定されたパスが見つかりません。
0x00000004 ファイルを開くことができません。
0x00000005 アクセスが拒否されました。
0x00000006 ハンドルが無効です。
0x00000007 記憶域制御ブロックが壊れています。
0x00000008 このコマンドを実行するのに十分な記憶域がありません。
0x00000009 記憶域制御ブロックのアドレスが無効です。
0x0000000A 環境が間違っています。
0x0000000B 間違ったフォーマットのプログラムを読み込もうとしました。
0x0000000C アクセス コードが無効です。
0x0000000D データが無効です。
0x0000000E この操作を完了するのに十分な記憶域がありません。
0x0000000F 指定されたドライブが見つかりません。
0x00000010 ディレクトリを削除できません。
0x00000011 ファイルを別のディスク ドライブに移動できません。
0x00000012 これ以上ファイルがありません。
0x00000013 このメディアは書き込み禁止になっています。
0x00000014 指定されたデバイスが見つかりません。
0x00000015 デバイスの準備ができていません。
0x00000016 デバイスがコマンドを認識できません。
0x00000017 データ エラー (巡回冗長検査 (CRC) エラー) です。
0x00000018 プログラムはコマンドを発行しましたが、コマンドの長さが間違っています。
0x00000019 指定されたディスクの領域またはトラックが見つかりません。
0x0000001A 指定されたディスクまたはフロッピー ディスクにアクセスできません。
0x0000001B 要求されたセクタが見つかりません。
0x0000001C プリンタは用紙切れです。
0x0000001D 指定されたデバイスに書き込めません。
0x0000001E 指定されたデバイスから読み取れません。
0x0000001F システムに接続されたデバイスが機能していません。

コメント

タイトルとURLをコピーしました