#発掘の要旨
本ブログ記事は
VB6のIDEをWindows10で - 多摩川お笑いでじたる研究所
他随所に引用されているにも関わらずリンク切れを起こしており、発掘したものである。
本編はWindows7を主体に記述されており、Windows8 / 10 の動作は不明であるが64bit Officeでは起動しないようだ。
#発掘した記事
ttp://from.hatenablog.jp/entry/2013/08/31/113432
リンク切れのためつながらず
2013-08-31
Windows7 に VB6.0 をインストールするとエラーが出る
仕事でまだ VB6.0 を使うケースがあるが、PCの方は、いい加減XPからWindows7に乗り換えなければなりません。
幸いにして、VB6.0 ランタイムは、Windows7/8 になっても未だに提供されており、初期状態でプレインストールされています(ランタイム全てではないですが)。
しかし、Visual Basic 6.0 (ランタイムじゃなく開発ツールのほう;以降こちらをVB6.0と書く)となるとちょっと事情が異なります。
VB6.0 を素直に Windows7 にインストールし、ServicePack 6 をあて、さらに VB6 SP6 のセキュリティロールアップバッチを適用した場合、どうにも正常に動作しません。
具体的には、以下の2つのエラーがちょくちょく発生します。
「システムレジストリへのアクセスでエラーが発生しました」
これは、どうも VB6.0 自身がレジストリを書き換えたいときに発生するようです。(OCXファイルのキャッシュであるOCAやEXDファイルを生成して、それらをレジストリに登録する、など)
要は、VB6.0 に管理者権限がないと。
大抵のアプリなら、ここで UAC に従って「変更させて良いか」を尋ねてくるのですが、VB6.0 の場合はなぜか UAC が機能せず、エラーが表示されるようです。
そしてなぜか2回目以降は表示されません。果たして、レジストリに登録されたのか、それとも VB6.0 が登録を諦めたのか?
最も簡単な解決方法は、
VB6.EXE のプロパティ → [互換性] タブ → [すべてのユーザーの設定を変更] → [管理者としてこのプログラムを実行する] にチェックを入れる
ことでしょうね。
VB6.0 の起動時に毎回 UAC のウィンドウで問い合わせが来ますが、少なくともレジストリエラーは発生しなくなります。
***初めて VB6.0 を起動するよりも前に設定することをお勧めします。
「オブジェクトライブラリが登録されていません」
とあるプロジェクトでとあるコンポーネントを追加しようとしたとき、ちゃんと OCX ファイルがレジストリに登録されているにも拘らず、登録されていないという旨のエラーがでて追加できないことがあります。
特に、MSCOMCTL.OCX での発生確率が高いようです。
解決法としては、regsvr32 で手動でOCXファイルを登録しなおしたり、自分でプロジェクトファイルをいじって OCX のバージョンを下げたりといった方法が散見されますが、うちの場合はそれでもアウトでした。
この場合は、regtlib.exe というコマンド(たぶん Visual Basic 6.0 に付いてくる)で、タイプライブラリを再登録すると良いようです。
例えば Windows7 HomeEdition (x86) での例を挙げますと、
1.コマンドプロンプト(Cmd.exe)を管理者権限で起動する。
2.下のコマンドを実行する。
> C:\Windows\regtlib.exe C:\Windows\system32\msdatsrc.tlb
これで、登録できなかったコンポーネントも登録できるようになると思います。
(編注:ただし当方のWindows10HOMEのPCではC:\Windows\regtlib.exeが見つからず成功しなかった。)
以上、備忘録として。
#実際
##注意
※あくまでも個人の経験です。あなたのPCで成立するかは不明です。
※Windows10 Home 64 bitです
##ダウンロード
Access2000>倉庫 TreeViewを使う-MAHOUTUKAINO.com
からサンプルのMDBファイルを入手する
■[program]Windows7+VB6で MSCOMCTL.OCX がうまくインストールできなかった問 - くらげのChangeLog
・コモン コントロールの再インストール
http://www.microsoft.com/ja-jp/download/details.aspx?id=10019
Microsoftのサイトより、「Microsoft Visual Basic 6.0 コモン コントロール」をインストールする。
インストールすると再起動のメッセージが出るので再起動する
CMD.Exeを管理者権限で起動する
CD
CD C:\Windows\SysWOW64
regsvr32 /u C:\Windows\SysWOW64\MSCOMCTL.OCX
regsvr32 C:\Windows\SysWOW64\MSCOMCTL.OCX
管理者権限より起動しないと上記のコマンドで
DLLRegisterServerへの呼び出しは0X8008201cにより失敗
エラーコードで検索しろという実にふざけたメッセージが出る。
本当は再起動するが求められるが無視してAccessのファイルを起動する。
参照設定に上記のファイルとMSCMCTL2.OCXを登録する。
参照設定で検索するときActiveXに切り替えないと見つからない。
これでAccessを立ち上げるところまではいくが、エラーがフォームを開くとエラーが発生する。
Set nodX = TreeView1.Nodes.Add(, , "A0", "一覧") '先頭のノードを設定
の行。
#参考
TreeView コントロール (Visual Basic 6.0 ユーザー向け)
更新 : 2007 年 11 月
Visual Basic 6.0 の TreeView コントロールは、Visual Basic 2008 の TreeView コントロールに置き換えられています。プロパティ、メソッド、イベント、および定数の中には、名称が異なるものや、動作の異なるものもあります。