VB6でMSSTDFMT.DLLが登録されていないというエラーが出る

目的

いまだVB6のツールを修正することがあるが,最近1カ所修正したところ,以下のようなClass not registered. You need the following file to be installed on your machine. MSSTDFMT.DLL.とexe起動時にエラーメッセージが英語で出力されてexeが何も動作できなくなることがあった.OKボタンしか存在しないが全然OKではない!

f:id:SO2_2009:20210526005123p:plain
exe起動時のMSSTDFMT.DLL未登録というエラー画面

その原因を記載する.解決方法としては,今回はその原因となる実装を使用しない,というだけである.

結論

テキストボックスの書式DataFormatを数値に設定したため.これを指定すると上記MSSTDFMT.DLLが参照されるようである.

f:id:SO2_2009:20210526005854p:plain
テキストボックスの書式DataFormatを数値に設定したときのプロパティ

なお,上記のエラーのとおり登録されていないというエラーであるため,同DLLをexeと同一階層においても何も問題は解決しない.テキストボックスに自由入力させる値を数字としておきたかったために上記の設定を入れ込んだが,VB6の開発環境がインストールされていない場合,上記のエラーが発生する.また,上記のMSSTDFMT.DLLが読み込まれる設定になってしまった場合は,プロジェクトファイルvbpに以下のようなReference分が追加される(開発環境をインストールした環境はWindows10 64ビット版).

Reference=*\G{6B263850-900B-11D0-9484-00A0C91110ED}#1.0#0#..\..\..\..\..\..\..\Windows\SysWow64\MSSTDFMT.DLL#Microsoft Data Formatting Object Library 6.0 (SP6)

私の今回のケースでは,レジストリー登録をクライアント先で行うことができないので,以下のとおり,デフォルトの状態である空白の状態に戻した*1

f:id:SO2_2009:20210526010216p:plain
テキストボックスの書式DataFormatをデフォルト(空白)に設定したときのプロパティ

*1:マウスの操作で数値→(空白)に戻すことができず,バージョン管理ツールで戻す羽目になった