【问题标题】: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

【问题讨论】:

    标签: excel udf vba


    【解决方案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 propertyVLOOKUP function 可以调用已关闭的外部工作簿。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2018-03-22
      相关资源
      最近更新 更多