在函数中引用外部工作簿

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 可以调用已关闭的外部工作簿。

【讨论】:

以上是关于在函数中引用外部工作簿的主要内容,如果未能解决你的问题,请参考以下文章

从外部主表更新工作簿的现有结构化表?

当另一个工作簿处于活动状态时,UDF 引用命名表错误

自动更新外部工作簿中的值

保存外部工作簿后删除名称管理器中的所有输入

从宏查询(加入)外部工作簿

excel工作簿出现“此工作簿包含一个或多个可能不安全的外部源的链接”,请问怎么取消这烦人的提示?