在特定的工作簿中打开特定的工作表

我有以下代码:

Dim conRow As Long Dim targetBook As Workbooks Dim targetSheet As Worksheet Dim targetRng As Range targetBook = Workbooks("C:\file\path\here\filename.xlsx") targetSheet = Worksheets("SheetName") targetRng = Range("$A:$A") conRow = Application.Match("APersonsName", Workbooks(targetBook).Sheets(targetSheet).targetRng, 0) 

这段代码给了targetBook所在行的属性的无效使用。 基本上我试图在一个给定的工作簿给定的工作表中查找给定范围内的人名; 稍后用于查找与该行相关联的各种属性。

也许我正在使用错误的function? 我的印象是,我使用的函数可以将索引和string作为参数。

我需要打开工作簿吗? 我不能不打开它参考工作簿?

tldr:
没有 。 您不能在VBA中引用未打开的工作簿; 甚至没有Application.Evaluate工作表上的公式的工作表。 您需要将公式写入工作表,收集返回的值,然后清除公式。

更多 …
您不能Set var设置为closures的工作簿对象。 您需要将该var设置为打开的工作簿,或者在打开该Workbooks.Open簿时将其设置为Workbooks.Open命令。 由于无法将var设置为未打开的工作簿,因此无法使用该工作簿对象引用来设置工作表或工作表范围/单元格对象。

 Dim strPath As String, strSheet As String, strLookup As String, var As Variant Dim targetBook As Workbook '<~~ note Workbook object, not Workbooks collection Dim targetSheet As Worksheet, targetRng As Range strPath = "C:\file\path\here\filename.xlsx" strSheet = "SheetName" strLookup = "aPersonsName" Set targetBook = Workbooks.Open(Filename:=strPath, readonly:=true) Set targetSheet = targetBook.Worksheets(strSheet) Set targetRng = targetSheet.Range("A:A") var = Application.Match(strLookup, targetRng, 0) If Not IsError(var) Then Debug.Print var End If targetBook.Close savechanges:=False 

您已经在设置targetRng的父级工作表和工作簿时符合您的要求。 你不需要在比赛中重复资格。