我已经四处搜索了,我知道如何从VB宏调用Personal.xlsb中的函数,但是如何调用该函数在新工作簿中使用?
这是我的功能,保存在' Module1'在我的Personal.xlsb
:
Public Function GetColumnLetter(colNum As Integer) As String
Dim d As Integer
Dim m As Integer
Dim name As String
d = colNum
name = ""
Do While (d > 0)
m = (d - 1) Mod 26
name = Chr(65 + m) + name
d = Int((d - m) / 26)
Loop
GetColumnLetter= name
End Function
我创建了一个新的工作簿,并认为我可以通过=getcolumnletter(1)
来调用它,但该功能并没有填充"当我开始输入=...
我忽略了什么吗?如何在没有VBA的情况下在其他工作簿中使用此功能?
感谢您的任何建议!
答案 0 :(得分:16)
=Personal.xlsb![macroname]
。所以在我的情况下,我只是把它放到单元格中:=Personal.xlsb!GetColumnLetter(2)
返回“B”。
答案 1 :(得分:13)
正如您已经发现的那样,您可以在函数前加上文件名Personal.xlsb!
。但请注意,如果您想避免为函数添加前缀,可以使用两个选项:
选项1
在将调用该函数的每个工作簿中创建引用。打开要使用该功能的工作簿,然后转到VBA编辑器。在菜单上,单击Tools --> References...
。在出现的对话框中,勾选Personal.xlsb
的VBA项目框。请注意,它将与项目名称一起列出(" VBA项目"除非您已更改默认名称)而不是文件名;如果其他工作簿处于打开状态,则可能有多个条目具有默认名称" VBA项目",因此您可能希望首先重命名它。更多详细信息可以在本文中找到,该文章发布在OP之后: http://www.myonlinetraininghub.com/creating-a-reference-to-personal-xlsb-for-user-defined-functions-udfs
选项2
如果您想要一个真正的通用UDF,无论是前缀还是引用都可以使用,您可以将其安装为加载项。这是通过使用UDF将文件保存为.xlam
文件来完成的(这显然是一个单独的文件而不是personal.xlsb
。)来自同一来源的单独文章中的其他详细信息: {{ 3}}
答案 2 :(得分:0)
我认为这可能是避免在外部工作表调用中以文件名 Personal.xlsb!
开头函数的最佳解决方案
在 VBA 属性窗口中,将 Personal.xlsb ThisWorkbook 的“IsAddin”属性设置为 True。现在,当您在外部工作表上使用它的函数时,您不必键入 Personal.xlsb!
前缀。未记录此行为。
https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.isaddin
神奇的是,前缀将在现有工作表调用中消失。当您在 True 和 False 之间切换 IsAddin 时,现有的工作表调用不会中断。
优势
注意事项
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = True
End Sub
在 IsAddin 设置为 FALSE 的情况下,转到 Excel 前端,确保您正在查看 Personal.xlsb 工作表(而不是其他工作簿),然后单击查看功能区 > 隐藏.当您关闭 Excel 时,接受提示“将更改保存到 Personal.xlsb?”现在它的外观和行为就像一个普通的 Personal.xlsb。
要将以后的编辑保存到 Personal.xlsb: