プロが教える店舗&オフィスのセキュリティ対策術

会社のPCでは問題なく動作するVBAが自宅PCでは動作しません。
プログラムの初期段階(宣言段階)で「実行時エラー'429'
ActiveX コンポーネントはオブジェクトを作成できません。」
とエラーになります。対処方法をお教えいただきたく質問させ
ていただきました。

PCの環境は次の通りです。
---------------------------------------------------------
'動作する環境(会社)
Windows7(32Bit)Excel2013(32Bit)
参照設定:DirectX 8 For Visual Basic Type Library
場所:C:\Windows\System32\dx8vb.dll

'動作できない環境(自宅)
Windows10(64Bit) Excel2016(64Bit)
参照設定:DirectX 8 For Visual Basic Type Library
    (参照不可の表示はありません)
場所:C:\Windows\System32\dx8vb.dll

自宅PCをエクスプローラーでファイルの存在を確認したところ
C:\Windows\System32には、dx8vb.dllが存在しますが
C:\Windows\SysWOW64には、存在しません。
-------------------------------------------------------------
またネット検索で見つけた次の処置は自宅PCに実施済です。
コントロールパネル
 レガシーコンポーネント
  Direct Play
にチェックを入れました。
-------------------------------------------------------------
ソースの一部(Formモジュールに記載)
'##################################
' 参照設定:DirectX 8 For Visual Basic Type Library
'##################################
Implements DirectXEvent8

'マウス用バッファサイズ
Private Const MAX_BUFFERSIZE As Long = 10

'DirectXオブジェクト
Private mDX As DirectX8

'DirectInputオブジェクト
Private mDI As DxVBLibA.DirectInput8

'マウス用DirectInputDeviceオブジェクト
Private mDIDevM As DxVBLibA.DirectInputDevice8

'マウス用イベントハンドル
Private mhEventM As Long

'キー用DirectInputDeviceオブジェクト
Private mDIDevK As DxVBLibA.DirectInputDevice8

'キー用イベントハンドル
Private mhEventK As Long

以下処理プログラムは省略します。

ご指導、ご教示のほどよろしくお願いします。

A 回答 (2件)

ANo.1です。


残念ながらDirectX12をVBAから使える簡便な方法はないと思われます。
VBAからDirectXを使うというのはDirectX7,8ころの技術で、DirectX9以降では対応していない様子です。ついでにいうとDirectX9から色々と変わっているので単純に対応させるようなことはできないと思います。だからこそ未だにdx8vb.dllが使われているのでしょう。

可能な対処法は、Excelを32bit版に入れ替えて、dx8vb.dllを
C:\Windows\SysWOW64
におくことでしょう。これで確かに動くかは未確認ですが。
なんにせよ、dx8vb.dllが32bitDLLなら64 bit Winowsの
C:\Windows\System32\dx8vb.dll
においておくことは無意味ですので、確認して除去すべきでしょう。
    • good
    • 0
この回答へのお礼

rinkunさん再度のご指導いただきありがとうございます。
残念ながらDirect Xはあきらめることにします。

キーボードの検知だけならGetAsyncKeyState()などで可能なのですが、
マウスの(特にホイールの回転)を検知したくDxVBLibA.DirectInputDevice8
にこだわりました。

まもなく定年を迎え、残る人生のライフワークとして、車椅子の自動運転をサ
ポートできるシステムの開発に取組もうと今から準備中です。
車輪の回転をマウスのホイールに伝える仕組みは日曜大工レベルで可能かなと
思っています。
車輪の回転に合わせてホールが前後にどれだけ回転したか。その時間経過はど
れだけか等をPCに取込めば車椅子の速度や位置や動作が認識できると考えてい
ます。
とまぁ自分の老後(既に老人ですが)の趣味のビジョンは置くとして、マウス
のホイールの回転を定量的に検知できるAPIをご紹介いただければ幸いです。

お礼日時:2016/12/13 20:30

Windows10のパソコンに含まれるdx8vb.dllは64bit用ですか。


ソフトの時代的に32bit版しかないように思いますが、そうだとしたらWindowsはともかくExcelが64bit版だとDirectX8は動作できないと思います。
一般にWindowsの64bit版で32bit版アプリケーションは動作しますが、64bit版アプリケーション(プロセス)から32bit版dllを呼び出すことはできません。
Excel2016の64bit版にVBAコードを32bitプロセスとして動かすようなギミックが入っていれば別ですが、そうでない限りは動かないと思われます。
# IEは64bitと32bitが混在して32bitアドインを動かせるようになっている
    • good
    • 0
この回答へのお礼

rinkunさん、ご指導ありがとうござます。

よく理解できました。まず自宅PCに入っているであろうDirectXを確認することから
始めました。
DirectX 診断ツール(dxdiag)というので診断してみました。
DirectX バージョン:DirectX 12 と表示されました。
DirectX が入っていることはこれで確認できたと思っていいのかな?

まあ、とにかく先へ進むこととします。っとここでいきなりつまずきました。

参照設定でDirectX 12の参照設定の方法がわかりません。
それらしいLibraryがありませんし、「参照」で探すにもdllの名前もわかりません。

さらに、その先で予測される「つまずき」は、ソース内でImplements DirectXEvent8
の部分やその他Private mDX As DirectX8の部分を単に8を12に書き換えて、めでたし
めでたしとはきっとならないのでしょうね。
もうすこし、七転八倒してみます。

さらにご指導いただければ幸甚です。

お礼日時:2016/12/12 19:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A