How to add a reference programmatically

前端 未结 4 1857
-上瘾入骨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 06:55

    Ommit

    There are two ways to add references via VBA to your projects

    1) Using GUID

    2) Directly referencing the dll.

    Let me cover both.

    But first these are 3 things you need to take care of

    a) Macros should be enabled

    b) In Security settings, ensure that "Trust Access To Visual Basic Project" is checked

    enter image description here

    c) You have manually set a reference to `Microsoft Visual Basic for Applications Extensibility" object

    enter image description here

    Way 1 (Using GUID)

    I usually avoid this way as I have to search for the GUID in the registry... which I hate LOL. More on GUID here.

    Topic: Add a VBA Reference Library via code

    Link: 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 (Directly referencing the dll)

    This code adds a reference to 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
    

    Note: I have not added Error Handling. It is recommended that in your actual code, do use it :)

    EDIT Beaten by mischab1 :)

提交回复
热议问题