在函数中引用外部工作簿

我想有一个引用外部工作簿的function。 我写了这个代码,但我收到“运行时错误9”。

Function SiteStatus(Arg1 As String) As String Dim RFSTable As Workbook Dim RFSSheet As Worksheet Dim RFSSites As Range Set RFSTable = Workbooks("D:\RFS.xlsx") Set RFSSheet = RFSTable.Worksheets(3) Set RFSSites = RFSSheet.Range("B2:B10000") If WorksheetFunction.IsNA(WorksheetFunction.VLookup(Arg1, RFSSites, 1, 0)) = False Then SiteStatus = "ÎÇãæÔ" Else SiteStatus = "ÑæÔä" End If End Function 

您不打开外部工作簿。 如果要引用已closures的外部工作簿,则仍然需要打开并阅读这些信息。 一旦打开,您还需要closures外部工作簿。 由于您只是试图确定一个单元格中是否存在单元格,所以工作表的MATCH函数更适合。

 Function SiteStatus(Arg1 As String) As String With Workbooks.Open(Filename:="D:\RFS.xlsx", ReadOnly:=True) With .Worksheets(3) With .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)) If IsError(Application.Match(Arg1, .Cells, 0)) Then SiteStatus = "ÑæÔä" Else SiteStatus = "ÎÇãæÔ" End If End With End With .Close SaveChanges:=False End With End Function 

.Worksheets(3)引用是危险的。 所有这一切都是为了让某人按照他们喜欢的队列顺序重新sorting,以打破这个function。

你为什么需要一个UDF? 如果指定Worksheet .Name属性,则VLOOKUP函数可以调用封闭的外部工作簿。