#名称?Excel中的VBA函数错误

Teo*_*tus 17 excel vba excel-vba

我正在制作我的第一个VBA程序并尝试运行以下功能.该函数检查第一行的特定命名范围,该范围的值不大于其前导值,但小于1.

Public Function findPurchase()

Dim CRT As Range
Set CRT = Range("CostRateTable")

Dim existsBetter As Boolean
existsBetter = True

Dim r As Integer
r = 2
Dim c As Integer
c = 4

While existsBetter

    Dim Found As Boolean
    FoundBetter = False

    While Not FoundBetter And c <= CRT.Columns.Count
        If CRT(r, c) > CRT(r, 2) And CRT(r, c) < 1 Then
            FoundBetter = True
        Else
            c = c + 1
        End If
    Wend


    existsBetter = FoundBetter
    If existsBetter Then
        r = r + 1
    End If
Wend

findPurchase = CRT(r, 3)
'MsgBox(findPurchase)
End Function
Run Code Online (Sandbox Code Playgroud)

我知道函数执行了它应该做的事情,因为我手动检查了值表,从MsgBox中删除了注释',并使用调试工具进入和退出每个函数步骤,因为它经历了表.但是,当我在Excel中引用该函数时,=findPurchase()我给出了一个#NAME?错误.当我开始输入其名称时,该功能甚至会显示在功能自动完成框中.当我编写带有和不带参数的其他函数时,我可以很好地引用它们,例如:

Function addtwo()
    addtwo = 1 + 2
End Function
Run Code Online (Sandbox Code Playgroud)

我的功能错误导致它无法正常工作?

Sid*_*out 38

您收到该错误,因为您有一个与该函数同名的模块.

在此输入图像描述

更改名称find_Purchase,一切都会好:)请看下面的图像...

在此输入图像描述

  • 我无法理解为什么在任何“如何创建 UDF”中都没有提到这一点。不要在内部函数之后命名模块!非常感谢您的回答@Siddharth,从现在开始我的模块被称为“mMyFuntion1,mMyFuntion2,等等......” (3认同)

小智 11

我自己也有同样的问题.事实证明,我"保存为..."另一个文件和宏未启用该文件.顶部没有横幅,但#NAME?生成了错误.我重新打开了文件,启用了宏,问题得到了解决.


Gar*_*ent 7

确保已将该功能放在标准模块中.错误消息表示Excel无法找到该功能.

  • 无论出于何种原因,仅将函数放入工作表中是行不通的。确实,需要一个模块。 (2认同)

DrM*_*use 5

当 Excel 打开包含 VBA 代码的未知工作簿时,它通常会要求用户启用宏(取决于应用程序设置)。

如果用户随后启用宏,则将启动所有事件驱动的过程,例如auto_open或其他。

但是,自定义 VBA 函数需要完全重新计算工作簿。否则函数返回值仍然是#NAME,因为计算仅在打开工作簿后直接完成。

为了在第一次打开时直接工作,必须在workbook_open事件中添加以下行

'
' Workbook open event
Private Sub Workbook_Open()
    Application.CalculateFullRebuild
End Sub
Run Code Online (Sandbox Code Playgroud)