英文:
How to Automatically set Excel VBA References?
问题
我理解我的脚本中使用的引用需要额外的引用才能运行我正在使用的所有函数,但现在我需要与许多其他人共享这个。这些都是每个人都应该安装的常见引用,只是未启用。
我在这个帖子1中找到了相同的问题,但我很难理解如何将其应用到我自己的需求中。
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 'adUseClient
我认为我只需要在上述代码中更改“ADODB”的名称以适应我正在使用的引用,但我不知道如何找到它。ADODB似乎不再作为一个选项存在,我也不知道这是.olb/.dll的确切名称还是库中的特定部分。
我还找到了帖子2来添加引用,但它与第一个帖子非常不同,而且更加复杂。
有人能指导我正确的方向吗?
我目前正在使用以下引用:
- Microsoft Office 16.0 对象库
- Microsoft Forms 2.0 对象库
- Microsoft Outlook 16.0 对象库
- Microsoft Scripting Runtime
- Microsoft Word 16.0 对象库
- NucleusNativeMessagingLib
帖子2建议添加 Microsoft Visual Basic for Applications Extensibility 5.3,以便我可以通过代码添加其他引用,但如果我现在需要手动添加它,其他用户如何通过代码添加该引用?
对此的任何帮助都将不胜感激。
祝一切顺利,
Will
英文:
I understand that the references I've used within my script require extra references to run all of the functions I am using but I now need this to be shared with many other people. They are all common references that everyone should have installed, just not enabled.
I have found this post1 with the same issue but I'm struggling to understand how to apply this to my own needs.
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 'adUseClient
I think I just need to change the "ADODB" in the above code to the right name for the references I'm using but I don't know how to find it. ADODB doesn't seem to exist as an option anymore and I don't know if this was the exact name of the .olb/.dll or a specific part within a library.
I have also found Post2 to add the references, but it is very different from the first post and is a lot more complicated.
Can anyone point me in the right direction?
I'm currently using the following references:
Microsoft Office 16.0 Object Library
Microsoft Forms 2.0 Object Library
Microsoft Outlook 16.0 Object Library
Microsoft Scripting Runtime
Microsoft Word 16.0 Object LIbrary
NucleusNativeMessagingLib
Post2 suggested adding Microsoft Visual Basic for Applications Extensibility 5.3 so that I could add the other references via code, but if I need to manually add that now, how do other uses add that Reference with code?
Any help with this is appreciated
All the best,
Will
答案1
得分: 2
为了从您的安装中提取必要的引用以添加到其他人的安装中,您可以使用以下函数:
Function getReference(wb As Workbook, refName As String) As Variant
Dim i As Long
For i = 1 To wb.VBProject.References.Count
If wb.VBProject.References(i).Name = refName Or _
wb.VBProject.References(i).Description = refName Then
With wb.VBProject.References(i)
getReference = Array(.Name, .Description, .FullPath, .GUID, .Major, .Minor)
End With
End If
Next i
End Function
它返回一个包含引用名称、描述、完整路径、GUID 以及主/次要版本的数组。有时,在引用窗口中看到的应该是引用描述,但实际上是引用名称(非常少见),但上述函数也能解决这种情况:
Sub TestgetReference()
Dim refName As String: refName = "Microsoft Word 16.0 Object Library" '在此处使用引用,如您在引用窗口中所见
'refName = "mscorlib.dll"
'refName = "System_Windows_Forms" '没有描述 - 这是它的名称
'refName = "PDFCreator" '没有描述 - 这是它的名称
'refName = "test not existing if all above ones also exist in the tested installation..."
Dim wb As Workbook: Set wb = ThisWorkbook '在此处使用您需要的工作簿
Dim arrRef
arrRef = getReference(wb, refName)
If Not IsEmpty(arrRef) Then
Debug.Print Join(arrRef, "|")
Else
MsgBox """" & refName & """" & " 未添加到 " & """" & wb.Name & """" & " VBProject。", vbInformation, _
"引用缺失"
End If
End Sub
当然,您需要使用您需要的引用。我只在需要定义该函数时使用了我的引用。
英文:
In order to extract from your installation the necessary references to be added to "other people" installations, you can use the next function:
Function getReference(wb As Workbook, refName As String) As Variant
Dim i As Long
For i = 1 To wb.VBProject.References.count
If wb.VBProject.References(i).name = refName Or _
wb.VBProject.References(i).Description = refName Then
With wb.VBProject.References(i)
getReference = Array(.name, .Description, .FullPath, .GUID, .Major, .Minor)
End With
End If
Next i
End Function
It returns an array containing the reference name, description, full path, Guid and its Major/minor version. Sometimes, what you can see in the References window and it should be the reference description, is its name (very seldom) but the above function is able to solve this cases, too:
Sub TestgetReference()
Dim refName As String: refName = "Microsoft Word 16.0 Object Library" 'use here a reference as you can see in the References window
refName = "mscorlib.dll"
'refName = "System_Windows_Forms" 'not having a description - this is its name
'refName = "PDFCreator" 'not having a description - this is its name
'refName = "test not existing if all above ones also exist in the tested installation..."
Dim wb As Workbook: Set wb = ThisWorkbook 'use here the workbook you need
Dim arrRef
arrRef = getReference(wb, refName)
If Not IsEmpty(arrRef) Then
Debug.Print Join(arrRef, "|")
Else
MsgBox """" & refName & """ is not added to """ & wb.name & """ VBProject.", vbInformation, _
"Reference missing"
End If
End Sub
Of course, you have to use the references you need. I only played with mines when needed to define the function...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论