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

Bru*_*yne 10 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
Run Code Online (Sandbox Code Playgroud)

我创建了一个新的工作簿,并认为我可以调用它=getcolumnletter(1),但是当我开始输入时,该函数不会"填充"=...

我忽略了什么?如何在没有VBA的情况下在其他工作簿中使用此功能?

谢谢你的建议!

Bru*_*yne 18

啊,这比我想象的要简单.只需在宏之前使用工作簿名称 - 所以=Personal.xlsb![macroname].所以在我的情况下,我只是把它放到单元格中:=Personal.xlsb!GetColumnLetter(2)返回"B".

  • 这很奇怪,因为在我看来,Personal.xlsb 将是您创建/存储宏的地方,您将使用“Excel 范围”。这可能不是微软对 Personal.xlsb 的目的吗?(尤其是在 Personal.xlsb 中,如果您有一个“公共函数”,我自然会认为它可以在所有工作簿中使用,而不必用“=Personal.xlsb![whatever]”专门调用它。 (2认同)

Ega*_*lth 14

正如您已经发现的那样,您可以使用文件名为函数添加前缀Personal.xlsb!.但请注意,如果您想避免为函数添加前缀,可以使用两个选项:

选项1在将调用该函数的每个工作簿中
创建一个引用.打开要使用该功能的工作簿,然后转到VBA编辑器.在菜单上,单击Tools --> References....在出现的对话框中,勾选VBA项目的框Personal.xlsb.请注意,它将与项目名称一起列出(除非您更改了默认名称,否则为"VBAproject")而不是文件名; 如果其他工作簿处于打开状态,则可能存在多个具有默认名称"VBAproject"的条目,因此您可能需要先将其重命名.更多细节可以在本文中找到,该文章发布在OP之后:http://www.myonlinetraininghub.com/creating-a-reference-to-personal-xlsb-for-user-defined-functions-udfs

选项2
如果您想要一个真正的通用UDF,无论是前缀还是引用都可以使用,您可以将其作为加载项安装.这是通过使用UDF将文件保存为文件来完成的.xlam(这显然是一个单独的文件personal.xlsb.)来自同一来源的单独文章中的其他详细信息:http://www.myonlinetraininghub.com/create-an-excel -add式换用户定义函数-的UDF

  • 这里有惊人的东西 正如@BruceWayne所述,Option1非常方便.我总是根据需要将我的个人功能复制并粘贴到我当前的项目中. (2认同)

joh*_*why 9

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

Personal.xlsb!我认为这可能是避免在外部表调用中以文件名作为函数前缀的最佳解决方案

在 VBA 属性窗口中,将 Personal.xlsb ThisWorkbook 的“IsAddin”属性设置为 True。Personal.xlsb!现在,当您在外部工作表上使用其功能时,无需键入前缀。此行为没有记录。

https://learn.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。

  • 这是一个没有价值的答案。我发布了一个类似的问题,这非常有帮助,老实说,这是一个非常干净的解决方案,可以让该功能在我的工作簿中有效地无缝运行。 (2认同)