VBA从添加到工作簿中导入udf模块

Posted

技术标签:

【中文标题】VBA从添加到工作簿中导入udf模块【英文标题】:VBA importing udf module from Add In to Workbook 【发布时间】:2016-02-27 12:10:19 【问题描述】:

所以,我有一个 .xlam 插件,里面有几个 UDF。作为众所周知的absolute path problem 的解决方法,我将我的 UDF 导入到当前工作簿,以便可以从工作簿调用 UDF,而不是使用以下代码从插件调用:

Sub CopyOneModule()
Dim FName As String
On Error GoTo errhandler
With ThisWorkbook
    FName = .Path & "\code.txt"
    .VBProject.VBComponents("HMFunctions").Export FName
End With
ActiveWorkbook.VBProject.VBComponents.Import FName
MsgBox ("Functions successfully imported")
errhandler:
If Err.Number <> 0 Then
        Select Case Err.Number
        Case Is = 0:
        Case Is = 1004:
            MsgBox "Please allow access to Object Model and try again.", vbCritical, "No Access granted"
        End Select
End If

它似乎工作正常。所以,我的(可能是愚蠢的)问题是:有没有办法使用导入的 UDF 制作工作簿“看不到”存储在 AddIn 中的相同模块?需要避免以下可能非常混乱的情况:

提前谢谢你。

【问题讨论】:

你不能卸载或禁用加载项吗?否则你可以在导入之前在 txt 文件中进行文本替换吗? 例如,加载项可以将 udf 标记为 Private,您可以在 txt 文件中将其删除 非常感谢!我在我的虚拟文本文件中做了简单的替换,现在一切都按我想要的方式工作了。 【参考方案1】:

按照snoopen 的建议,从临时文本文件中删除私人标签就像一个魅力。问题关闭。这是我用于导入的最终代码:

    Sub CopyOneModule()
Dim FName As String
Dim FileContent As String
Dim TextFile As Integer
Dim ws As Workbook

Set ws = ActiveWorkbook

On Error GoTo errhandler
With ThisWorkbook
    FName = .Path & "\code.txt"
    .VBProject.VBComponents("HMFunctions").Export FName
End With

TextFile = FreeFile
Open FName For Input As TextFile
FileContent = Input(LOF(TextFile), TextFile)
Close TextFile
FileContent = Replace(FileContent, "Private", "")
TextFile = FreeFile
Open FName For Output As TextFile
Print #TextFile, FileContent
Close TextFile

ws.VBProject.VBComponents.Import FName
MsgBox ("Functions successfully imported")
errhandler:
If Err.Number <> 0 Then
        Select Case Err.Number
        Case Is = 0:
        Case Is = 1004:
            MsgBox "Please allow access to Object Model and try again.", vbCritical, "No Access granted"
        End Select
    End If

End Sub

【讨论】:

以上是关于VBA从添加到工作簿中导入udf模块的主要内容,如果未能解决你的问题,请参考以下文章

另一个工作簿中的更改会影响主工作簿中的 UDF

根据变量定义的路径从多个关闭的工作簿中导入数据

UDF 在工作簿中创建指向位置的超链接

当另一个工作簿处于活动状态时,UDF 引用命名表错误

Excel VBA在生成副本的工作表中插入本工作簿中的VBA模块代码

将一个工作簿中的工作表中的VBA代码复制到另一个工作簿?