VBA를 사용하여 프로그래밍 방식으로 참조를 추가하는 방법
Skype가 완료되면 실행하여 Skype에 정보를 전달하는 프로그램을 작성했습니다.스카이프로 메시지를 보내려면 참고 자료를 추가해야 합니다.네트워크와 공유 파일 서버(특히)에 12대 정도의 컴퓨터가 있습니다.다른 모든 컴퓨터는 이 프로그램을 실행할 수 있어야 합니다.저는 손으로 레퍼런스를 설정하는 것을 피하고 싶었습니다.저는 프로그램이 실행될 때 참조를 공유 위치에 배치하고 프로그래밍 방식으로 추가할 계획이었습니다.
VBA를 사용하여 Excel 2007에 참조를 프로그래밍 방식으로 추가하는 방법을 알 수 없습니다.수동으로 하는 방법을 알고 있습니다. 열리세요. 하지만 제 목적에는 별로 도움이 되지 않습니다.Access Vb.net 에서 이 작업을 수행할 수 있는 방법이 있다는 것을 알고 있으며 이와 유사한 코드가 계속 표시되지만, 이 작업을 이해할 수 있는지 또는 관련이 있는지는 잘 모르겠습니다.
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
지금까지 제시된 솔루션에서 참조를 프로그래밍 방식으로 추가하려면 수동으로 참조를 추가하고 트러스트 센터를 변경해야 합니다. 이는 단순히 참조를 추가하는 것 이상입니다.제안된 솔루션을 수행하면 향후 참조 자료를 프로그래밍 방식으로 추가할 수 있을 것으로 생각합니다.아마 노력할 가치가 있을 겁니다.
더 이상의 생각이 있으면 좋겠습니다.
생략
VBA를 통해 프로젝트에 참조를 추가하는 두 가지 방법이 있습니다.
GUID 사용
DLL을 직접 참조합니다.
둘 다 커버해드릴게요.
하지만 먼저 이것들은 당신이 신경써야 할 3가지입니다.
매크로를 사용하도록 설정해야 합니다.
보안 설정에서 "Visual Basic Project에 대한 액세스 신뢰"가 선택되어 있는지 확인합니다.
'Microsoft Visual Basic for Applications Extensibility' 개체에 대한 참조를 수동으로 설정했습니다.
Way 1(GUID 사용)
보통 레지스트리에서 GUID를 검색해야 하기 때문에 이 방법을 피합니다.내가 싫어하는 것은 하하하.GUID에 대한 자세한 내용은 여기를 참조하십시오.
주제: 코드를 통해 VBA 참조 라이브러리 추가
링크: 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(dll을 직접 참조)
는 이코는다추니다합가참에 대한 합니다.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
참고: 오류 처리를 추가하지 않았습니다.실제 코드에서는 사용하는 것이 좋습니다 :)
편집자:mischab1
:)
VBA를 사용하여 참조를 추가하는 두 가지 방법이 있습니다. .AddFromGuid(Guid, Major, Minor)
그리고..AddFromFile(Filename)
어떤 것이 가장 좋은지는 참조를 추가하려는 대상에 따라 달라집니다.는 거의 거의항사용다니합상다니를 사용합니다..AddFromFile
내가 참조하는 것은 다른 Excel VBA 프로젝트이며 Windows 레지스트리에 없기 때문입니다.
표시된 예제 코드는 코드가 있는 워크북에 참조를 추가합니다.90%의 경우 참조를 추가하기 전에 이미 참조가 누락되어 컴파일에 실패했기 때문에 일반적으로 그렇게 하는 것이 의미가 없다고 생각합니다. (그리고 컴파일에 실패하지 않았다면, 아마도 지연 바인딩을 사용하고 있으며 참조를 추가할 필요가 없습니다.)
코드를 실행하는 데 문제가 있는 경우 두 가지 문제가 있을 수 있습니다.
- VBE의 개체 모델을 쉽게 사용하려면 Microsoft Visual Basic for Application Extensibility(VBIDE)에 대한 참조를 추가해야 합니다.
- VBP 프로젝트에서 변경되는 Excel VBA 코드를 실행하려면 VBA Project Object Model에 대한 Trust 액세스 권한이 필요합니다(Excel 2010에서는 Trust Center - Macro Settings에 있습니다).
그것과는 별개로, 당신의 질문이 무엇인지 혹은 당신이 하려는 것이 무엇이 효과가 없는지에 대해 조금 더 명확하게 말씀해 주실 수 있다면, 저는 좀 더 구체적인 답변을 드릴 수 있습니다.
레지스트리에서 가이드를 검색하거나 경로를 사용하는 것이 가장 좋습니다.더 이상 레지스트리를 검색할 필요가 없다면 가이드를 사용하는 것이 더 좋은 방법이 아닐까요?Office가 항상 동일한 디렉토리에 설치되지는 않습니다.설치 경로는 수동으로 변경할 수 있습니다.버전 번호도 경로의 일부입니다.64비트 프로세서가 도입되기 전에는 마이크로소프트가 '프로그램 파일'에 '(x86)'을 추가할 것이라고는 전혀 예상하지 못했을 것입니다.가능하다면 경로를 사용하지 않도록 노력하겠습니다.
아래 코드는 Siddharth Rout의 답변에서 파생되었으며, 활성 워크북에 사용되는 모든 참조를 나열하는 추가 기능이 있습니다.최신 버전의 Excel에서 워크북을 열면 어떻게 됩니까?VBA 코드를 적용하지 않고도 워크북이 계속 작동합니까?2003년 사무실과 2010년 사무실 가이드가 동일하다는 것을 이미 확인했습니다.Microsoft가 향후 버전에서 가이드를 변경하지 않기를 바랍니다.
인수 0.0(부터)입니다.AddFromGuid)는 최신 버전의 참조(테스트할 수 없음)를 사용해야 합니다.
당신의 생각은 어떻습니까?물론 미래를 예측할 수는 없지만 코드 버전을 증명하기 위해 무엇을 할 수 있을까요?
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
위의 코드는 더 이상 "Microsoft Visual Basic for Applications Extensibility" 개체에 대한 참조가 필요하지 않습니다.
다음은 Guid를 프로그래밍 방식으로 가져오는 방법입니다!그런 다음 위의 답변과 함께 이러한 가이드/파일 경로를 사용하여 참조를 추가할 수 있습니다!
참조: http://www.vbaexpress.com/kb/getarticle.php?kb_id=278
Sub ListReferencePaths()
'Lists path and GUID (Globally Unique Identifier) for each referenced library.
'Select a reference in Tools > References, then run this code to get GUID etc.
Dim rw As Long, ref
With ThisWorkbook.Sheets(1)
.Cells.Clear
rw = 1
.Range("A" & rw & ":D" & rw) = Array("Reference","Version","GUID","Path")
For Each ref In ThisWorkbook.VBProject.References
rw = rw + 1
.Range("A" & rw & ":D" & rw) = Array(ref.Description, _
"v." & ref.Major & "." & ref.Minor, ref.GUID, ref.FullPath)
Next ref
.Range("A:D").Columns.AutoFit
End With
End Sub
여기에는 동일한 코드가 있지만 출력에 워크시트를 전용으로 사용하지 않으려면 터미널로 인쇄합니다.
Sub ListReferencePaths()
'Macro purpose: To determine full path and Globally Unique Identifier (GUID)
'to each referenced library. Select the reference in the Tools\References
'window, then run this code to get the information on the reference's library
On Error Resume Next
Dim i As Long
Debug.Print "Reference name" & " | " & "Full path to reference" & " | " & "Reference GUID"
For i = 1 To ThisWorkbook.VBProject.References.Count
With ThisWorkbook.VBProject.References(i)
Debug.Print .Name & " | " & .FullPath & " | " & .GUID
End With
Next i
On Error GoTo 0
End Sub
언급URL : https://stackoverflow.com/questions/9879825/how-to-add-a-reference-programmatically-using-vba
'programing' 카테고리의 다른 글
Git에서 마지막 커밋을 두 개로 나누는 방법은 무엇입니까? (0) | 2023.05.12 |
---|---|
어셈블리의 net standard, Version=2.0.0.0에 대한 참조를 추가해야 합니다. (0) | 2023.05.12 |
데이터 바인딩 드롭다운 목록 - 초기 값 (0) | 2023.05.12 |
HTML5 비디오 클라이언트에 대한 실시간 http 스트리밍에 대한 최상의 접근 방식 (0) | 2023.05.12 |
EscapeUriString과 EscapeDataString의 차이점은 무엇입니까? (0) | 2023.05.12 |