在新工作簿中使用Personal.xlsb函数?

时间:2015-08-04 17:03:13

标签: excel vba excel-vba

我已经四处搜索了,我知道如何从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的情况下在其他工作簿中使用此功能?

感谢您的任何建议!

3 个答案:

答案 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)

选项 3(扩展上面@Egalth 的回答):

我认为这可能是避免在外部工作表调用中以文件名 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 时,现有的工作表调用不会中断。

优势

  • 您不必将文件另存为加载项,因此您不会混淆加载项和原始 Personal.xlsb 同时打开。
  • 您不必设置对它的引用。

注意事项

  • 如果在工作簿打开时进行了更改,系统不会提示您保存工作簿。所以一定要手动保存更改。
  • 重新打开 Excel 时,IsAddin 将重置为 False,并且 Personal.xlsb 的工作表将可见。执行以下操作以解决此问题:
  1. 将以下代码添加到 ThisWorkbook 模块:

Private Sub Workbook_Open()

ThisWorkbook.IsAddin = True

End Sub

  1. 在 IsAddin 设置为 FALSE 的情况下,转到 Excel 前端,确保您正在查看 Personal.xlsb 工作表(而不是其他工作簿),然后单击查看功能区 > 隐藏.当您关闭 Excel 时,接受提示“将更改保存到 Personal.xlsb?”现在它的外观和行为就像一个普通的 Personal.xlsb。

  2. 要将以后的编辑保存到 Personal.xlsb:

  • 如果停留在编辑会话中,则确保在 VBA 项目资源管理器中选择 Personal.xlsb,然后单击保存。
  • 如果关闭 Excel,请执行上面的第 2 步。