Cómo agregar una referencia mediante programación usando VBA
Escribí un programa que se ejecuta y envía mensajes a Skype con información cuando finaliza. Necesito agregar una referencia para Skype4COM.dll
poder 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.
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
c) Ha establecido manualmente una referencia al objeto "Microsoft Visual Basic para extensibilidad de aplicaciones".
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
:)
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 .AddFromFile
porque 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.
- Para utilizar fácilmente el modelo de objetos de VBE, debe agregar una referencia a Microsoft Visual Basic para la extensibilidad de aplicaciones . (VBIDE)
- 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.