Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11192 / 13644 ツリー ←次へ | 前へ→

【17533】COMアドインから他ブックを開く ぱくぱく 04/9/1(水) 20:15 質問[未読]
【17537】Re:COMアドインから他ブックを開く bykin 04/9/1(水) 21:35 回答[未読]
【17557】Re:COMアドインから他ブックを開く ぱくぱく 04/9/2(木) 10:54 お礼[未読]

【17533】COMアドインから他ブックを開く
質問  ぱくぱく E-MAIL  - 04/9/1(水) 20:15 -

引用なし
パスワード
   おせわになっております、ようやくCOMアドインの勉強を始めたのですが、
すでにつまってしまいました。

作成したCOMアドインから必要に応じて同じフォルダに保存してあるブック(xl
s)やアドイン(xla)のシートやマクロをコピー・参照して使うのが目的です。

必要に応じて、ブック・アドインを開きRUNで動かし、その後開いたファイル
をクローズしようとしているのですが呼び出すCOMアドインのパスがわからな
いためにファイルのオープンがうまく行きません。ExcelでのThisWorkbookみ
たいなのはどれに当るのでしょうか?どうか宜しくお願い致します。

 G_ExcelApp.Workbooks.Open Filename:="他ファイル参照.xls"
 'G_ExcelApp.AddIns.Add Filename:="他ファイル参照.xla" 'アドインのと

 
 Application.Run "他ファイル参照.xls!テスト"

【17537】Re:COMアドインから他ブックを開く
回答  bykin  - 04/9/1(水) 21:35 -

引用なし
パスワード
   こんばんわ。

COMアドイン(DLL)は普通はレジストリに登録されてるはずやから
そっからデータを取得したらええんとちゃいまっか?
取得するにはDLLのクラス名を知っておく必要があります。
自分で作ったんやったら、わかってるとは思うけど、
クラス名=プロジェクト名.デザイナモジュール名です。
VbaProject.Disigner1 なんて感じ。

レジストリからDLLのパスを取得する関数を作ってみました。

Function GetDllPath(ByRef Class As String) As String
  Dim WSH As Object
  Dim ClassID As String
  
  On Error Resume Next
  GetDllPath = ""
  Set WSH = CreateObject("Wscript.Shell")
  ClassID = WSH.RegRead("HKCR\" & Class & "\Clsid\")
  GetDllPath = WSH.RegRead("HKCR\CLSID\" & ClassID & "\InprocServer32\")
  GetDllPath = Left$(GetDllPath, InStrRev(GetDllPath, "\") - 1)
  Set WSH = Nothing
End Function

↓こんな感じで取得できると思います。

Sub test()
  MsgBox GetDllPath("VbaProject.Disigner1")
End Sub

但し、この方法は開発中はレジストリに未登録なんで、使えまへん。
DLLを作成したら使えるようになるってこと。
せやから開発環境での動作チェックは・・・無理やね(^^;;
開発中は上記のコードはコメントアウトして、固定のパスを使い、
DLL作成前にコメント解除するとかやろねー

ま、いっぺん試してみてな。
ほな。

【17557】Re:COMアドインから他ブックを開く
お礼  ぱくぱく E-MAIL  - 04/9/2(木) 10:54 -

引用なし
パスワード
   >bykinさん

すばらしいです。完璧です。
Thisworkbook.pathみたいにかんたんにとれなかったんですね、、、

COMアドインはもっと勉強しなければ、、むずかしいです。

11192 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free