gpt4 book ai didi

Excel-VBA 从文本文件导入模块(无需信任中心)

转载 作者:行者123 更新时间:2023-12-03 00:18:55 24 4
gpt4 key购买 nike

我正在尝试在网络位置中创建一个保存为 .txt 文件的子程序和函数的自定义库,我正在创建的工作簿的各个用户可以根据他们选择的用户表单函数导入它们。工作簿的用户只能通过用户表单使用工作簿。我不想要求他们修改其安全信任中心设置以使此导入库代码正常工作,因此我不想使用 wb.VBproject.References.import 命令,或 make他们加载项。

我发现这种方法非常有效,但前提是没有其他工作簿打开。如果另一个工作簿打开,此代码最终会在另一个工作簿中插入一个新模块,然后用户窗体调用就毫无意义。

我不明白这是怎么可能的,因为我在“With ThisWorkbook”语句中引用了所有这些代码。我做错了什么?

Sub importLib(libName As String)
Application.DisplayAlerts = False

Path = "C:\Users\(username)\Desktop\excelLibraries\" 'Example only, my path is actually a network location
lib = Path & libName
Dim wb As Workbook
Set wb = ThisWorkbook
With wb
On Error Resume Next
Dim wbModules As Modules

Set wbModules = .Application.Modules 'wb=ThisWorkbook, but doesn't point to this workbook when other workbooks open???

'wb.VBProject.VBComponents.Import lib '---> library saved as .bas, but this requires the user to change their security settings
'wb.VBProject.References.AddFromFile lib '---> library saved as add-in reference, but this requires user to change security settings

'----This method works when no other workbooks are open
For Each a In wbModules 'Clear any previous Library Module
If a.Name = "Library" Then
a.Delete
Exit For
End If
Next

Set m = wbModules.Add 'Create a new Library Module
m.Name = "Library"
m.InsertFile lib 'Insert the code
On Error GoTo 0
End With
Application.DisplayAlerts = True

End Sub

Sub callsub()
importLib "library1.txt"
End Sub

最佳答案

进行以下更改似乎对我有用。

  1. Dim wbModules As Modules 更改为 Dim wbModules。否则我会收到类型不匹配错误。
  2. 删除Set wbModules = .Application.Modules中的.Application

编辑:

@Mathieu Guindon已在评论中指出,但值得在问题正文中保留,Application 指的是 Excel 应用程序实例,主机Modules 集合包含所有打开的模块,无论工作簿如何。

关于Excel-VBA 从文本文件导入模块(无需信任中心),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54221055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com