1. ホーム
  2. excel

[解決済み] VBAを使用してプログラム的に参照を追加する方法

2023-03-01 18:47:58

質問

プログラムを実行し、終了時に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 :)