[解決済み] VBAを使用してプログラム的に参照を追加する方法
質問
プログラムを実行し、終了時にSkypeに情報をメッセージするプログラムを書きました。その際
Skype4COM.dll
を追加して、Skypeでメッセージを送信する必要があります。私たちはネットワーク上に10数台のコンピュータを持ち、共有ファイル サーバーを使用しています(中略)。他のすべてのコンピュータは、このプログラムを実行できる必要があります。手作業でリファレンスを設定するのは避けたいと考えていました。私は、共有の場所に参照を置き、プログラムが実行されたときにプログラム的にそれを追加することを計画していました。
VBA を使用して Excel 2007 にプログラム的に参照を追加する方法がわからないようです。手動で行う方法は知っています。開く
VBE --> Tools --> References --> browse --_> File Location and Name
. でも、それだと私の目的にはあまり使えません。でやる方法があるのは知っています。
アクセス Vb.net
で行う方法があることは知っていますし、これに似たコードもずっと出てきていましたが、私がそれを理解しているかどうか、それが関連しているかどうかはわかりません。
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
これまでのところ、提示された解決策では、プログラムで参照を追加するためには、手で参照を追加して Trust Center を変更する必要があります - これは参照を追加するだけではありません。しかし、提案された解決策を実行すれば、将来的にプログラムによる参照を追加できるようになると思います。それはおそらく努力に値するものです。
さらに何かご意見があれば、ぜひお聞かせください。
どのように解決するのですか?
オミット
プロジェクトにVBAで参照を追加する方法は2つあります。
1) GUIDを使用する
2) dllを直接参照する。
両方をカバーしよう。
しかし、その前にあなたが気をつけるべきことは次の3つです。
a) マクロを有効にする必要があります。
b) セキュリティの設定で、"Trust Access To Visual Basic Project"がチェックされていることを確認します。
c) 手動で`Microsoft Visual Basic for Applications Extensibility"オブジェクトへの参照を設定しました。
方法1(GUIDを使う)
レジストリでGUIDを検索しなければならないので、私は通常この方法を避けています...これは嫌ですね(笑) GUID の詳細 ここで .
トピック コードによるVBA参照ライブラリの追加
リンク : http://www.vbaexpress.com/kb/getarticle.php?kb_id=267
'Credits: Ken Puls
Sub AddReference()
'Macro purpose: To add a reference to the project using the GUID for the
'reference library
Dim strGUID As String, theRef As Variant, i As Long
'Update the GUID you need below.
strGUID = "{00020905-0000-0000-C000-000000000046}"
'Set to continue in case of error
On Error Resume Next
'Remove any missing references
For i = ThisWorkbook.VBProject.References.Count To 1 Step -1
Set theRef = ThisWorkbook.VBProject.References.Item(i)
If theRef.isbroken = True Then
ThisWorkbook.VBProject.References.Remove theRef
End If
Next i
'Clear any errors so that error trapping for GUID additions can be evaluated
Err.Clear
'Add the reference
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:=strGUID, Major:=1, Minor:=0
'If an error was encountered, inform the user
Select Case Err.Number
Case Is = 32813
'Reference already in use. No action necessary
Case Is = vbNullString
'Reference added without issue
Case Else
'An unknown error was encountered, so alert the user
MsgBox "A problem was encountered trying to" & vbNewLine _
& "add or remove a reference in this file" & vbNewLine & "Please check the " _
& "references in your VBA project!", vbCritical + vbOKOnly, "Error!"
End Select
On Error GoTo 0
End Sub
方法2 (DLLを直接参照する)
このコードでは
Microsoft VBScript Regular Expressions 5.5
Option Explicit
Sub AddReference()
Dim VBAEditor As VBIDE.VBE
Dim vbProj As VBIDE.VBProject
Dim chkRef As VBIDE.Reference
Dim BoolExists As Boolean
Set VBAEditor = Application.VBE
Set vbProj = ActiveWorkbook.VBProject
'~~> Check if "Microsoft VBScript Regular Expressions 5.5" is already added
For Each chkRef In vbProj.References
If chkRef.Name = "VBScript_RegExp_55" Then
BoolExists = True
GoTo CleanUp
End If
Next
vbProj.References.AddFromFile "C:\WINDOWS\system32\vbscript.dll\3"
CleanUp:
If BoolExists = True Then
MsgBox "Reference already exists"
Else
MsgBox "Reference Added Successfully"
End If
Set vbProj = Nothing
Set VBAEditor = Nothing
End Sub
注意 : 私はエラー処理を追加していません。実際のコードでは、使用することをお勧めします :)
EDIT
に負けた
mischab1
:)
関連
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] MongoDBのリレーションシップ:埋め込みか参照か?
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
-
[解決済み] Excelでミリ秒を表示する
-
[解決済み] xlsmやxlsbはどのような場合に使用するのですか?
-
[解決済み] VBAを使用してカスタムリボンタブを追加するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Excelの日付から文字列への変換
-
[解決済み] While...Wendループからの脱却
-
[解決済み] 1行目とA列目を同時に凍らせる
-
[解決済み] VBAでFileSystemObjectを使用するにはどうしたらよいですか?
-
[解決済み] VBAを使用してカスタムリボンタブを追加するには?
-
[解決済み] セルからコピーする際に引用符を省く
-
[解決済み] Excel VBAで「!=」に相当するものは何ですか?
-
[解決済み] 行番号と列番号を指定してセルの内容を取得する
-
[解決済み] なぜExcelは同じ名前のファイルを2つ扱えないのですか?[クローズド]
-
[解決済み] セルが変わると自動的にExcelマクロを実行する