在函数中引用外部工作簿
Posted
技术标签:
【中文标题】在函数中引用外部工作簿【英文标题】:Referencing external workbook in function 【发布时间】:2016-02-22 05:20:08 【问题描述】:我想要一个引用外部工作簿的函数。我编写了此代码,但收到“运行时错误 '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
【问题讨论】:
【参考方案1】:您没有打开外部工作簿。如果要引用已关闭的外部工作簿,仍需要打开并阅读信息。打开后,您还需要关闭外部工作簿。由于您只是想确定一个单元格是否存在于单列中,因此工作表的 MATCH function 更合适。
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)
引用很危险。只需有人将工作表重新排序为他们喜欢的队列顺序即可破坏该功能。
为什么需要 UDF?如果您指定工作表.Name property,VLOOKUP function 可以调用已关闭的外部工作簿。
【讨论】:
以上是关于在函数中引用外部工作簿的主要内容,如果未能解决你的问题,请参考以下文章