VBA 코드로 레퍼런스 참조하기
VBA에서는 DLL(혹은 tlb, olb) 파일을 참조할 수 있습니다. 방법은 크게 두가지 입니다.
첫번째로 VBE화면에서 도구 => 참조 => 참조할 레퍼런스를 추가하는 방법입니다. 개인적으로 사용한다면 아무 문제없이 사용할 수 있는 방법입니다. 하지만 프로그램 배포가 필요한 환경이라면 얘기가 달라지겠죠. 참조에러가 나는 순간 VBA코드가 동작하지 않게되니까요. 하지만 일반적으로는 (아마도) 참조를 걸어놓은 채로 파일을 배포하면, 참조가 걸린채로 사용자가 사용할 수 있습니다. 그러나 신뢰하기는 어렵기 때문에 코드로 참조를 거는 법을 공유하려고 합니다.
코드로 참조를 거는 방법은 두가지가 존재합니다.
첫번째로 VBIDE.VBProject 개체의 References.AddFromFile을 이용하는 방법입니다. 아래의 코드는 “Microsoft VBScript Regular Expressions 5.5” 참조가 걸린상태에서 구동합니다.
vbProj.References.AddFromFile “C:\WINDOWS\system32\vbscript.dll\3”
첫번째 방법인 AddFromFile은 dll파일의 위치를 알아야합니다. 위의 코드는 windows가 C드라이브에 설치되어 있다고 가정하고 있습니다. 일반적은 참조들은 windows, commonFiles, programFiles 같은 디렉토리에 위치합니다. window가 설치된 디렉토리나, msOFfice가 설치된 디렉토리 등등을 알기는 쉽지 않겠죠.
두번째 방법은 GUID를 이용하는 방법입니다. GUID에 대해 궁금하다면 A [위키피디아] (https://en.wikipedia.org/wiki/Universally_unique_identifier)에서 확인하실 수 있습니다.
Option Explicit Public Sub AddReference() Dim strGUID As String, theRef As Variant, i As Long
'ActiveX data Object 6.1
strGUID = "{B691E011-1797-432E-907A-4D8C69339129}"
On Error Resume Next
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
Err.Clear
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:=strGUID, Major:=6, Minor:=1
'If an error was encountered, inform the user
Select Case Err.Number
Case Is = 32813
'이미 사용중인 참조
Case Else
Debug.pring err.number & ":" & err.Description
End Select End Sub
VBProject.References.AddFromGuid로 GUID를 파라미터를 줘서 추가하는 것을 알겠는데, 내가 추가하고픈 참조의 GUID는 어떻게 알아낼까요? 아래의 프로시저를 사용해보세요.
Public Sub DebugPrintExistingRefs() ‘오피스설정에서 액세스 신뢰를 확인필요 Dim i As Integer With Application.ThisWorkbook.VBProject.References For i = 1 To .count Debug.Print “””” & .Item(i).Name & “”” : “ & “””” & .Item(i).GUID & “””” Next i End With End Sub
궁금한점이 있으시면 댓글로 답해드리겠습니다.