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,一切都会好:)请看下面的图像...

当 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)
| 归档时间: |
|
| 查看次数: |
70488 次 |
| 最近记录: |