我在 Microsoft 365 中使用 Excel,并且有几个用 MS VBA 编写的 UDF,并保存在位于 C:\Users\username\AppData\Roaming\Microsoft\AddIns 的 *.xla 文件中。此外,该文件已作为加载项成功加载,因为我可以在“开发人员”选项卡的“Excel 加载项”图标上提供的加载项窗口中看到它。我还可以从 Visual Basic 窗口查看模块中的代码。
问题是 UDF 的所有实例都有以下错误:#NAME?。
但是,如果我先打开 *.xla 文件(这会生成一个完全空白的电子表格,即没有单元格),然后打开包含我的 UDF 的已保存电子表格,则所有 UDF 都可以正常工作。虽然这是一种解决方法,但有点笨拙,我想要一个更干净的解决方案。
我的期望是因为我的 *.xla 文件作为 Excel 插件加载,它自然可以在任何 Excel 电子表格中使用。
我还尝试取消选中打开电子表格时创建的加载项,但当我重新打开电子表格时,UDF 的每个实例都会根据上面提到的 *.xla 文件的路径进行更改。除非输入完整路径,否则 UDF 的新实例将无法工作。例如:
='C:\Users\用户名\AppData\Roaming\Microsoft\AddIns\myAddIn.xla'!UDFname(E9,E10).
我对这个问题很好奇,并回到了已故但很棒的Chip Pearson的网站。按照他页面上的说明,我能够完成您所坚持的事情。看看你的问题(顺便说一句,做得很好),看起来你确实已将其保存到正确的位置,但我会仔细检查,因为这似乎最有可能出现错误。
对于它的价值,以下是我能够使 UDF 从初始加载空白文件中显示为可识别公式的方法:
xla
所在的位置,所以我将 Chip 的文件复制到那里thanksPearson
并点击保存。模块中的整个代码保存在下面的 xla
。=thanksPerason("boom")
按预期执行。Option Explicit
Sub MacroToRunOne()
Dim S As String
S = "Hello World From One:" & vbCrLf & _
"This Add-In File Name: " & ThisWorkbook.FullName
MsgBox S
End Sub
Function thanksPerason(anINput As Variant) As String
thanksPerason = " what the function is this" & anINput
End Function
Sub MacroToRunTwo()
Dim S As String
S = "Hello World From Two:" & vbCrLf & _
"This Add-In File Name: " & ThisWorkbook.FullName
MsgBox S
End Sub
如果不太明显,我是 Chip Pearson 的作品的粉丝,他于 2018 年因车祸过早去世。如果您仔细阅读他的网站,您会发现这绝对是一部写得很好、易于理解的解释的杰作,其中的示例“被誉为比微软曾经制作的任何产品都“有用得多”。反正。考虑到他为世界带来的价值,他只是一个值得时不时大声疾呼的人。