如何从Excel单元格调用VBA函数(2010)?

时间:2012-09-10 12:04:43

标签: excel-2010

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

尝试:

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

我错过了什么?

这不是一个聪明的代码:

Function Square2(AnyNumber)

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

End Function

9 个答案:

答案 0 :(得分:41)

答案

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

的步骤

  1. 打开VBA编辑器(Windows上的Alt + F11 / Mac上的Fn + Option + F11
  2. 右键单击 VBAProject
  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)

  6. Macro Screenshot

答案 1 :(得分:6)

我遇到了同样的问题,经过努力为我效劳之后:

我的函数位于名为Personal.XLSB的宏工作簿中的模块内。我用函数名称和个人宏工作簿文件名和!作为前缀,所以如果函数名是函数(x,y),我在单元格中输入" = PERSONAL.XLSB!theFunction(x,y)。这很有用。

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

答案 2 :(得分:4)

确保您未处于设计模式。

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

如果仍然启用,或者不允许运行宏,请确保启用了宏。

  

激活宏。

     

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

答案 3 :(得分:4)

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

答案 4 :(得分: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

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

答案 5 :(得分:1)

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

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

然后回到我的工作簿,在A1 typed = Decrement(2)并点击Enter,它有效。当我输入= Decr时,递减显示在函数的下拉列表中...它被识别,并且它起作用。我甚至不需要保存工作簿。

我知道这不是你问题的答案,但这是我运气好的秘诀。

答案 6 :(得分:1)

如果您的模块与您的功能名称相同,我认为可能存在问题。尝试重命名模块或功能。

答案 7 :(得分:0)

激活宏。

答案 8 :(得分:0)

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

  1. 将工作簿另存为.xlsm
  2. 按照上面的建议启用宏
  3. 设置参考。在VBA(Alt-F11)中,选择“工具/引用”,然后浏览到包含要使用的宏的工作簿。检查列表中的引用。

    如果收到有关模块名称冲突的错误消息,请先在项目浏览器中将其重命名。