• ベストアンサー

コードで参照設定をする方法

VBのコード内で、オブジェクトへの「参照設定」をさせる方法を教えていただけませんでしょうか。 目的は、自分のコンピュータでは参照設定してあるオブジェクトでも、ほかのパソコンではされていると限らないため、アプリ(実際はエクセルブック)の起動時に参照設定を強制したい。参照設定がないと、そのオブジェクト変数の宣言文がコンパイルエラーとなってしまいますよね・・・。 VBAのヘルプによればこちらのメソッド(object.AddFromGuid(guid, major, minor) As Reference)を使うといいような気がするのですが、参照設定したい先(具体的には「Microsoft Scripting Runtime(scrrun.dll)」)の「GUID」がわかりません。レジストリを探さないといけないのでしょうか・・・。探し方がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >アプリ(実際はエクセルブック)の起動時に参照設定を強制したい。 VBAですね。Microsoft Scripting Runtime(scrrun.dll)で、何をしようとされているのか分りませんが、一過性(パスを取ったり、ファイルを探す程度)で使うなら、CreateObjectで十分な気がします。Versionの違いもありません。 ただ、全て、CreateObjectでまかなえるとは言えませんが。 Access では、コードで「参照設定」を標準的にするらしいですね。ところが、他のExcelで、以下のようなコードを書いている人も見たことがないのです。 Excelで、今、試してみましたが、これで通りましたね。ただし、全ての環境で通るとは言えません。 OSによって、ReferencePath を変えればよいわけですね。   ReferencePath がシステムのあるところ   myDll は dll の名前   ThisWorkbook.VBProject.References.AddFromFile ReferencePath & myDll

ptano99
質問者

お礼

AddFromFileというのがあったのですね!なるほど、helpの探し方がまた浅かったです。目から鱗です。勉強になりました。 また、#1さんからもご指摘のとおり「事前バインディング」にこだわらず、CreateObjectで確かに十分かもしれませんので、もう少し良く考えて見ます。ありがとうございました。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

参照設定せずに事前バインディングですか? 無理かと。 # どうやってコンパイルするの? そうゆう場合は、遅延バインディングします。 詳しくは、CreateObjectのヘルプ

関連するQ&A

  • Referencesの参照設定

    http://www.tsware.jp/tips/tips_565.htm を参考に、 VBAで参照設定されているライブラリの一覧を取得したいのですが、 Sub t() Dim Ref As Reference For Each Ref In References With Ref Debug.Print .Name Debug.Print .FullPath Debug.Print .GUID Debug.Print .Major Debug.Print .Minor Debug.Print .IsBroken End With Next Ref End Sub を実行すると、 Ref As Reference の部分で、コンパイルエラー(ユーザー定義型は定義されていません) になります。 多分、Referencesの参照設定をしないと、このコードは使えないからだと思うのですが、 参照設定にどこにチェックをすればいいでしょうか?

  • VBAで参照設定を行いたい GUIDを知るには?

    オフィス2010なのですが、 VBAで参照設定を行いたいのですが GUIDというのはどうやって調べればいいのでしょうか? 例えばエクセルに参照設定したいのですが レジストリエディタを立ち上げて、 HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel のどの部分を見れば、GUIDがわかりますか? http://www.moug.net/tech/acvba/0010004.html を参考にvbaコードを作っていますが、 Public Function SetGUID() On Error GoTo Err_Check: Dim Ref As Reference 'Microsoft Excel 9.0 Objects Library (Excel2000) Const strExcel As String = "{00020813-0000-0000-C000-000000000046}" '参照設定 Set Ref = References.AddFromGuid(strExcel, 1, 3) Func_Exit: Set Ref = Nothing Exit Function Err_Check: If Err.Number = 32813 Then Resume Next Else MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description GoTo Func_Exit: End If End Function やはりこれだと、参照設定できません。 もちろんオフィスのバージョンが違うからだと思いますが。 あと、AddFromGuidメソッドの引数Major、Minorも、どの値を設定してあげればいいのかわかりません。 ご教授よろしくお願いします。

  • コードの中での参照設定

    VBの参照設定をコードで書くことは出来るのでしょうか? DLLの登録、参照設定をコードの中でやってみたいだけなのですが・・・

  • VBの参照設定について

    はじめまして、Doryaです。 早速ですが、VBでACTIVEX.DLLを作成してローカルのドライブにおいてEXEプログラムより参照設定しています。 このEXEをコンパイルして、他のPCへ移しましたがプログラムが、起動しませんでした。他のPCも、コンパイルしたPCと同じようにACTIVEX.DLLを、デシトリビューションウイザードで作り登録していました。 どうも、参照設定がうまくできてないような気がします。ためしに、プログラム(EXE)をデシトリビューションウイザードを使ってインストールしましたら、問題なくうごきました。これって、DLLとEXEを別々にコピーして、配布することはできないのでしょうか?

  • Microsoft Excel VBAの参照設定

    参照設定のデフォルト環境で Microsoft Scripting Runtime をオンにしておきたいのですがどうすればいいのでしょうか? 新しくExcelを起動し、その都度、 Microsoft Scripting Runtime をオンにするのは非常に手間なので、わかる方いましたら教えてください。

  • ExcelVBAで参照設定を自動に行う

    AccessのVBAではReferencesコレクション中のReferenceオブジェクトを使用して、行うことが出来ると、ネット上で読みました。 Excel2003で同じ事を行おうと、コーディングをしたところ、変数の宣言で「... As 」まで記述したところに表示されるメニュー(?)に、「Reference」が表示されませんでした。 「ExcelVBAで参照設定を自動に行う」方法、もしくは私の環境のExcel2003で「Reference」が表示されない考えられる原因を教授下さい。 よろしくお願いします。

  • vbaで参照設定する方法

    sub フォルダをコピーする() Dim myFSO As New FileSystemObject myFSO.CopyFolder "D:\TEST", "D:\TEST2" End Sub を実行したいのですが、 Visual Basic Editor の [ツール]-[参照設定] で、 "Microsoft Scripting Runtime" にチェックせずに、 vbaで参照設定する方法を教えてください。 バージョンは2007です。 ご回答よろしくお願いします。

  • 参照設定に「MSXML2.XMLHTTP」

    VBAでMSXML2.XMLHTTPを使ってIE操作をしたいのですが、 参照設定に「MSXML2.XMLHTTP」が見つかりません。 Dim objIE As Object でも宣言できますが、 本物のオブジェクトで宣言したいです。 何かをダウンロードしなくてはいけないのでしょうか?

  • VBScriptからDLL参照設定したい

    初めて質問します。宜しくお願いします。 VBScriptからある業務アプリのAPIを操作したいと考えています。参照したいDLLは分かっているのですが参照設定の方法が分かりません。「Declare」など宣言することによって参照設定することは可能でしょうか。そもそもVBScriptからはDLLへの参照設定はできないのでしょうか。 ちなみにOSはWin2000サーバまたはWin2003サーバを想定しています。 以上、宜しくお願いします。

  • access2003参照設定の質問

    WinXP Aceess2003で作成したプロジェクトをWin7でコンパイル・実行などを行い、再び自分のXP に持帰ったら、"DLL読み込み時のエラーです"などのメッセージで動きません。 プロジェクトが壊れたと思い、新規作成したプロジェクトにインポートしようとしたら、"既存のモジュール、プロジェクト、オブジェクトライブラリと名前が競合しています"で別プロジェクトにもインポート出来ません。 色々見てみると、参照設定に"参照不可 Excel14.0 Oblect Library"があったので、チェックをはずしてOKをすると、これも"DLL読み込み時のエラーです"が出ます。 Win7で実行した時に、環境が変わったようですが、どうすれば良いですか? 宜しくお願い致します。