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

Mar*_*haw 31 excel-2010

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

尝试:

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

我错过了什么?

这不是一个聪明的代码:

Function Square2(AnyNumber)

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

End Function
Run Code Online (Sandbox Code Playgroud)

Ada*_*hus 45

回答

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

脚步

  1. 打开VBA编辑器(Alt + F11在Windows上/ Fn + Option + F11在Mac上)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  5. 像任何其他函数一样从单元格中调用它: =findArea(B12,C12)

宏截图

  • PS.另一个问题; 如果您的模块名称与您的函数名称相同(例如模块`Demo`包含`public function Demo()`,您将得到一个`#NAME?`.修改模块名称为不同的东西(例如`DemoModule` resolve这就像在公式中使用完全限定名一样(例如`= Demo.Demo()`) (3认同)

Utt*_*tam 6

在为我效劳之后,我遇到了同样的问题:

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

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