終了したら、Skypeを実行して情報をメッセージで送信するプログラムを作成しました。 Skype経由でメッセージを送信するには、Skype4COM.dll
の参照を追加する必要があります。ネットワーク上に数十台のコンピューターと共有ファイルサーバーがあります(特に)。他のすべてのコンピューターは、このプログラムを実行できる必要があります。手動で参照を設定するのを避けたいと思っていました。参照を共有の場所に置き、プログラムの実行時にプログラムで参照を追加することを計画していました。
VBAを使用してExcel 2007にプログラムで参照を追加する方法がわからないようです。私はそれを手動で行う方法を知っています:OpenVBE --> Tools --> References --> browse --_> File Location and Name
しかし、それは私の目的にはあまり役に立ちません。 Access Vb.net でそれを行う方法があることは知っていますが、これに似たコードがポップアップし続けますが、理解できるかどうか、または関連があるかどうかはわかりません:
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
これまでのところ、提示されたソリューションでは、参照をプログラムで追加するには、手動で参照を追加し、参照を追加するだけではなく、セキュリティセンターを変更する必要があります。提案された解決策を順守すれば、プログラムで将来の参照を追加できると思いますが。これはおそらく努力する価値があります。
それ以上の考えは素晴らしいだろう。
オミット
VBAを介して参照をプロジェクトに追加する方法は2つあります
1)GUIDを使用
2)dllを直接参照します。
両方をカバーさせてください。
しかし、最初にこれらはあなたが世話をする必要がある3つのものです
a)マクロを有効にする必要があります
b)セキュリティ設定で、「Visual Basicプロジェクトへのアクセスを信頼する」がチェックされていることを確認します
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
Way 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
注:エラー処理を追加していません。実際のコードでは、使用することをお勧めします:)
編集mischab1
にBeatられて:)
VBAを使用して参照を追加するには2つの方法があります。 .AddFromGuid(Guid, Major, Minor)
および.AddFromFile(Filename)
。どちらが最適かは、参照を追加しようとしているものによって異なります。参照しているものは他のExcel VBAプロジェクトであり、Windowsレジストリにはないため、ほとんど常に.AddFromFile
を使用します。
表示しているサンプルコードは、コードが含まれるワークブックへの参照を追加します。参照を追加する前に、コードが既にコンパイルに失敗しているのは、90%の時間です参照がないためです。 (コンパイルに失敗しなかった場合は、おそらく遅延バインディングを使用しているため、参照を追加する必要はありません。)
コードの実行に問題がある場合は、2つの問題が考えられます。
それとは別に、あなたの質問が何であるか、またはあなたがしようとしていることでもう少し明確にできる場合、それはうまくいきません。
GUIDのレジストリを参照したり、パスを使用したりする方法が最適です。レジストリを参照する必要がなくなった場合、GUIDを使用するより良い方法ではないでしょうか? Officeは常に同じディレクトリにインストールされるとは限りません。インストールパスは手動で変更できます。また、バージョン番号はパスの一部です。 64ビットプロセッサが導入される前に、Microsoftが '(x86)'を 'Program Files'に追加することを予測することはできませんでした。可能であれば、パスを使用しないようにします。
以下のコードは、Siddharth Routの回答から派生したもので、アクティブなワークブックで使用されているすべての参照をリストする追加機能を備えています。ブックを新しいバージョンのExcelで開くとどうなりますか? VBAコードを調整しなくても、ブックは機能しますか? Office 2003と2010のGUIDが同じであることを既に確認しました。 Microsoftが将来のバージョンでGUIDを変更しないことを期待しましょう。
引数0,0(.AddFromGuidから)は、参照の最新バージョンを使用する必要があります(これはテストできませんでした)。
あなたの考えは何ですか?もちろん、将来を予測することはできませんが、コードバージョンを証明するために何ができますか?
Sub AddReferences(wbk As Workbook)
' Run DebugPrintExistingRefs in the immediate pane, to show guids of existing references
AddRef wbk, "{00025E01-0000-0000-C000-000000000046}", "DAO"
AddRef wbk, "{00020905-0000-0000-C000-000000000046}", "Word"
AddRef wbk, "{91493440-5A91-11CF-8700-00AA0060263B}", "PowerPoint"
End Sub
Sub AddRef(wbk As Workbook, sGuid As String, sRefName As String)
Dim i As Integer
On Error GoTo EH
With wbk.VBProject.References
For i = 1 To .Count
If .Item(i).Name = sRefName Then
Exit For
End If
Next i
If i > .Count Then
.AddFromGuid sGuid, 0, 0 ' 0,0 should pick the latest version installed on the computer
End If
End With
EX: Exit Sub
EH: MsgBox "Error in 'AddRef'" & vbCrLf & vbCrLf & err.Description
Resume EX
Resume ' debug code
End Sub
Public Sub DebugPrintExistingRefs()
Dim i As Integer
With Application.ThisWorkbook.VBProject.References
For i = 1 To .Count
Debug.Print " AddRef wbk, """ & .Item(i).GUID & """, """ & .Item(i).Name & """"
Next i
End With
End Sub
上記のコードでは、「Microsoft Visual Basic for Applications Extensibility」オブジェクトへの参照はもう必要ありません。
Guidをプログラムで取得する方法は次のとおりです。これらのGUID /ファイルパスを上記の回答とともに使用して、参照を追加できます!
リファレンス: http://www.vbaexpress.com/kb/getarticle.php?kb_id=278
Sub ListReferencePaths()
'Lists path and GUID (Globally Unique Identifier) for each referenced library.
'Select a reference in Tools > References, then run this code to get GUID etc.
Dim rw As Long, ref
With ThisWorkbook.Sheets(1)
.Cells.Clear
rw = 1
.Range("A" & rw & ":D" & rw) = Array("Reference","Version","GUID","Path")
For Each ref In ThisWorkbook.VBProject.References
rw = rw + 1
.Range("A" & rw & ":D" & rw) = Array(ref.Description, _
"v." & ref.Major & "." & ref.Minor, ref.GUID, ref.FullPath)
Next ref
.Range("A:D").Columns.AutoFit
End With
End Sub
これは同じコードですが、出力にワークシートを割り当てたくない場合にターミナルに出力します。
Sub ListReferencePaths()
'Macro purpose: To determine full path and Globally Unique Identifier (GUID)
'to each referenced library. Select the reference in the Tools\References
'window, then run this code to get the information on the reference's library
On Error Resume Next
Dim i As Long
Debug.Print "Reference name" & " | " & "Full path to reference" & " | " & "Reference GUID"
For i = 1 To ThisWorkbook.VBProject.References.Count
With ThisWorkbook.VBProject.References(i)
Debug.Print .Name & " | " & .FullPath & " | " & .GUID
End With
Next i
On Error GoTo 0
End Sub