How to add a reference programmatically

前端 未结 4 1813
-上瘾入骨i
-上瘾入骨i 2020-11-22 06:02

I\'ve written a program that runs and messages Skype with information when if finishes. I need to add a reference for Skype4COM.dll in order to

4条回答
  •  [愿得一人]
    2020-11-22 07:01

    Browsing the registry for guids or using paths, which method is best. If browsing the registry is no longer necessary, won't it be the better way to use guids? Office is not always installed in the same directory. The installation path can be manually altered. Also the version number is a part of the path. I could have never predicted that Microsoft would ever add '(x86)' to 'Program Files' before the introduction of 64 bits processors. If possible I would try to avoid using a path.

    The code below is derived from Siddharth Rout's answer, with an additional function to list all the references that are used in the active workbook. What if I open my workbook in a later version of Excel? Will the workbook still work without adapting the VBA code? I have already checked that the guids for office 2003 and 2010 are identical. Let's hope that Microsoft doesn't change guids in future versions.

    The arguments 0,0 (from .AddFromGuid) should use the latest version of a reference (which I have not been able to test).

    What are your thoughts? Of course we cannot predict the future but what can we do to make our code version proof?

    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
    

    The code above does not need the reference to the "Microsoft Visual Basic for Applications Extensibility" object anymore.

提交回复
热议问题