VBA – 自动检查/取消选中微软脚本运行时间

我有以下function,自动添加Microsoft Script Runtime参考引用列表。 但是,如果用户已经包含Microsoft script runtime ,它将显示错误Name conflicts with existing module,project, object library

如果自动添加Microsoft script runtime如果它不包含在引用中),并且如果已经添加,则不执行任何操作?

 Private Function AddScriptingLibrary() As Boolean Const GUID As String = "{420B2830-E718-11CF-893D-00A0C9054228}" On Error GoTo errHandler ThisWorkbook.VBProject.References.AddFromGuid GUID, 1, 0 AddScriptingLibrary = True Exit Function errHandler: MsgBox Err.Description End Function 

您需要首先枚举项目的引用,以检查引用是否已经存在。

我已经添加了对Microsoft Visual Basic for Applications Extensibility 5.3的引用

 Option Explicit Function AddScriptingLibrary() Const GUID_Scripting = "{420B2830-E718-11CF-893D-00A0C9054228}" Dim proj As VBIDE.VBProject Dim ref As VBIDE.Reference Dim ScriptingLibraryIsReferenced As Boolean Set proj = ThisWorkbook.VBProject For Each ref In proj.References If ref.GUID = GUID_Scripting Then ScriptingLibraryIsReferenced = True AddScriptingLibrary = True Exit Function End If Next ref If Not ScriptingLibraryIsReferenced Then On Error GoTo errHandler proj.References.AddFromGuid GUID_Scripting, 1, 0 AddScriptingLibrary = True Exit Function errHandler: MsgBox Err.Description End If End Function 

编辑这相同,但没有Visual Basic的应用程序扩展性5.3参考的早期界限参考:

 Option Explicit Function AddScriptingLibrary() Const GUID_Scripting = "{420B2830-E718-11CF-893D-00A0C9054228}" Dim proj As Object 'VBIDE.VBProject Dim ref As Object 'VBIDE.Reference Dim ScriptingLibraryIsReferenced As Boolean Set proj = ThisWorkbook.VBProject For Each ref In proj.References If ref.GUID = GUID_Scripting Then ScriptingLibraryIsReferenced = True AddScriptingLibrary = True Exit Function End If Next ref If Not ScriptingLibraryIsReferenced Then On Error GoTo errHandler proj.References.AddFromGuid GUID_Scripting, 1, 0 AddScriptingLibrary = True Exit Function errHandler: MsgBox Err.Description End If End Function 

但是,如果您对晚期代码的缺陷感到满意,则甚至不需要对Scripting.Runtime的引用,因为您可以使用:

 Option Explicit Sub PrintDriveCount() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") 'Print the number of drives in the FileSystemObject Debug.Print FSO.Drives.Count End Function