Cómo agregar una referencia mediante programación usando VBA

Resuelto Ommit asked hace 12 años • 4 respuestas

Escribí un programa que se ejecuta y envía mensajes a Skype con información cuando finaliza. Necesito agregar una referencia para Skype4COM.dllpoder enviar un mensaje a través de Skype. Tenemos una docena de computadoras en una red y un servidor de archivos compartido (entre otras cosas). Todas las demás computadoras deben poder ejecutar este programa. Esperaba evitar configurar la referencia a mano. Había planeado poner la referencia en una ubicación compartida y agregarla mediante programación cuando se ejecutara el programa.

Parece que no puedo entender cómo agregar una referencia mediante programación a Excel 2007 usando VBA. Sé cómo hacerlo manualmente: abrir VBE --> Tools --> References --> browse --_> File Location and Name. Pero eso no es muy útil para mis propósitos. Sé que hay formas de hacerlo en Access Vb.net y seguía apareciendo un código similar a este, pero no estoy seguro de entenderlo o si es relevante:

ThisWorkbook.VBProject.References.AddFromGuid _
    GUID:="{0002E157-0000-0000-C000-000000000046}", _
    Major:=5, Minor:=3

Hasta ahora, en las soluciones presentadas, para agregar la referencia mediante programación necesitaré agregar una referencia a mano y cambiar el Centro de confianza, que es más que solo agregar la referencia. Aunque supongo que si sigo adelante con las soluciones propuestas podré agregar referencias futuras mediante programación. Lo que probablemente hace que valga la pena el esfuerzo.

Cualquier idea adicional sería genial.

Ommit avatar Mar 27 '12 04:03 Ommit
Aceptado

Omitir

Hay dos formas de agregar referencias vía VBA a tus proyectos

1) Usando GUID

2) Hacer referencia directa a la dll.

Déjame cubrir ambos.

Pero primero estas son 3 cosas de las que debes ocuparte

a) Las macros deben estar habilitadas

b) En la configuración de Seguridad, asegúrese de que "Confiar en el acceso al proyecto de Visual Basic" esté marcado

ingrese la descripción de la imagen aquí

c) Ha establecido manualmente una referencia al objeto "Microsoft Visual Basic para extensibilidad de aplicaciones".

ingrese la descripción de la imagen aquí

Forma 1 (usando GUID)

Normalmente evito este método porque tengo que buscar el GUID en el registro... lo cual odio LOL. Más sobre GUID aquí .

Tema: Agregar una biblioteca de referencia de VBA mediante código

Enlace : 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

Forma 2 (haciendo referencia directa al dll)

Este código añade una referencia aMicrosoft 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

Nota : No he agregado Manejo de errores. Se recomienda que en su código real lo use :)

EDITAR Vencido por mischab1:)

Siddharth Rout avatar Mar 26 '2012 21:03 Siddharth Rout

Hay dos formas de agregar referencias usando VBA. .AddFromGuid(Guid, Major, Minor)y .AddFromFile(Filename). Cuál es mejor depende de a qué intentas agregar una referencia. Casi siempre lo uso .AddFromFileporque las cosas a las que hago referencia son otros proyectos de Excel VBA y no están en el Registro de Windows.

El código de ejemplo que está mostrando agregará una referencia al libro de trabajo en el que se encuentra el código. Generalmente no veo ningún sentido en hacerlo porque el 90% de las veces, antes de que pueda agregar la referencia, el código ya no se pudo compilar. porque falta la referencia. (Y si no falló la compilación, probablemente esté utilizando el enlace tardío y no necesita agregar una referencia).

Si tiene problemas para ejecutar el código, existen dos posibles problemas.

  1. Para utilizar fácilmente el modelo de objetos de VBE, debe agregar una referencia a Microsoft Visual Basic para la extensibilidad de aplicaciones . (VBIDE)
  2. Para ejecutar código Excel VBA que cambie algo en un VBProject, necesita confiar en el acceso al modelo de objetos del proyecto VBA . (En Excel 2010, se encuentra en el Centro de confianza - Configuración de macros).

Aparte de eso, si puedes ser un poco más claro sobre cuál es tu pregunta o qué estás tratando de hacer que no funciona, podría darte una respuesta más específica.

mischab1 avatar Mar 26 '2012 21:03 mischab1