函数在即时窗口中工作,但不在工作表中?

我试图做一个公共职能,在不同的工作簿中查找用户提供的号码,并从中提取信息。 用户将提供一个计划编号(实际上是一个带有数字的string),并且该函数将在另一个工作簿中查找该编号以收集与计划编号相关联的文件编号和十字路口。现在我拥有该function在即时窗口中调用时工作,但会返回#VALUE! 当在工作表中调用时。 这是我的。

Public Function indexfind(Plan As String) As String Dim wks As Worksheet Dim d As Range Dim filenumber As String Dim crossing As String Dim Plannumber As Double Plannumber = Val(Left(Plan, 4)) Workbooks.Open ("File Path") Workbooks("PLANINDE.xls").Worksheets("Index").Activate Set wks = Workbooks("PLANINDE.xls").Worksheets("Index") Set d = wks.Range("G:G").Find(Plannumber, , xlValues) If d Is Nothing Then indexfind = "Plan Does Not Exist" Workbooks("PLANINDE.xls").Close (False) Exit Function End If filenumber = wks.Cells(d.Row, 2).Value crossing = wks.Cells(d.Row, 3).Value Workbooks("PLANINDE.xls").Close (False) Debug.Print filenumber Debug.Print crossing Debug.Print Plannumber indexfind = "No Plan Folder. File Number:" & filenumber & " crossing:" & crossing End Function 

您的代码不能作为直接从工作表调用的函数。 VBA UDF的限制是可以做的。

https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel