34

我使用 VBA 在工作簿中定义了一些函数,然后希望能够在单元格公式中使用它们 - 但 Excel 无法识别该函数。我只是得到#NAME?

试过:

  • 意识到我已经创建了一个 XSLX 文件,我将它转换为一个 XSLM 文件。没用。
  • 从函数声明中删除了所有类型。没用。
  • 将该函数移到工作表 VBA 模块中。没用。
  • 在声明中添加了 Public。没用。

我错过了什么?

这也不是聪明的代码:

Function Square2(AnyNumber)

'return the square of any integer
Square2 = AnyNumber * AnyNumber

End Function
4

9 回答 9

53

回答

将函数放在“ThisWorkbook”区域可能会导致#NAME?问题。创建一个新模块(右键单击 VBAProject 文件夹,插入,新建模块)并将函数放在那里。

脚步

  1. 打开 VBA 编辑器(Alt + F11在 Windows 上/Fn + Option + F11在 Mac 上)
  2. 右键单击VBA 项目
  3. 选择插入>>模块
  4. 在里面创建一个Public函数Module1,例如:

    Public Function findArea(ByVal width as Double, _
                             ByVal height as Double) As Double
        ' Return the area
        findArea = width * height
    End Function
    
  5. 从单元格中调用它,就像任何其他函数一样:=findArea(B12,C12)

宏截图

于 2013-04-30T09:52:35.437 回答
8

在为以下工作苦苦挣扎之后,我遇到了同样的问题:

我的函数位于宏工作簿中名为 Personal.XLSB 的模块中。我在函数名称前加上个人宏工作簿文件名和!,所以如果函数名称是 theFunction(x,y) 我在单元格“=PERSONAL.XLSB!theFunction(x,y) 中输入。这行得通。

请注意,对我来说,PERSONAL.XLSB 始终以隐藏模式打开。

于 2016-02-17T19:02:08.330 回答
4

确保您未处于设计模式。

在 excel 的开发人员选项卡上和 VBA 编辑器的运行/停止按钮旁边有一个设计模式按钮。如果它被选中,并且不允许您取消选择它,请尝试在启用宏的情况下重新打开工作簿。

如果它仍然启用,或者不会让宏运行,请确保启用了宏。

激活宏。

-- https://stackoverflow.com/a/20659823/258482

于 2015-01-19T17:36:09.297 回答
4

我有一个相同的问题,包括一个工作函数,后来停止工作并给出 #NAME 错误。通过确保模块的名称与函数的名称不同,我设法解决了这两个问题。我在 Module1 中有一个工作函数 F_1,我将模块名称更改为 F_1 并且它停止工作,现在回到 Module1 并且该函数再次工作。当我将模块名称从 F_2 更改为 Module2 时,我的第二个函数也开始工作。

于 2015-12-13T19:58:39.650 回答
1

XLSX 文件和 XLSM 文件与它无关。格式在您保存文件时发挥作用。(在 XLSX 中,VBA 代码将在保存文件时被剥离)。

以下来自http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspx的代码在我的 excel 的新模块中运行良好。

Function Discount(quantity, price)
    If quantity >= 100 Then
        Discount = quantity * price * 0.1
    Else
        Discount = 0
    End If
    Discount = Application.Round(Discount, 2)
End Function

鉴于我看不到您的代码,您能否尝试以下功能是否也适合您?如果是这样,请开始修改下面的函数,使其成为您的函数(例如,首先更改名称并查看是否有效,然后更改参数数量并检查是否有效,然后更改参数名称)。

于 2012-09-10T12:19:35.683 回答
1

我打开 Excel,打开代码编辑器(Alt+F11),选择新工作簿,插入新模块,输入

Function Decrement(i As Integer) As Integer
  Decrement = i - 1
End Function

然后回到我的工作簿并在 A1 中键​​入 =Decrement(2) 并按 Enter 键,它起作用了。当我输入 =Decr... 时,函数的下拉列表中出现了减量...它被识别,并且有效。我什至不必保存工作簿。

我知道这不完全是你问题的答案,但这是我很幸运的食谱。

于 2012-09-11T16:08:35.160 回答
1

我认为如果您的模块与您的函数同名,可能会有问题。尝试重命名您的模块或函数。

于 2015-03-17T14:11:14.957 回答
0

激活宏。

于 2013-12-18T13:43:12.500 回答
0

如果您使用的是最新版本的 Excel,要在另一个工作簿中查看 VBA 函数,您需要:

  1. 将工作簿另存为 .xlsm

  2. 按照上面的建议启用宏

  3. 设置参考。在 VBA (Alt-F11) 中选择工具/参考,然后浏览到包含您要使用的宏的工作簿。检查列表中的参考。

    如果您收到有关模块名称冲突的错误消息,请先在项目资源管理器中重命名它。

于 2015-03-24T10:10:12.307 回答