【问题标题】:Building a Vlookup between separate workbooks在单独的工作簿之间构建 Vlookup
【发布时间】:2014-06-25 16:32:51
【问题描述】:

我是 VBA 编码的新手,我正在尝试构建一个 Vlookup 来连接两个单独的工作簿。提供 belwo 是我的编码,它当前在 vlookup 行上产生运行时 1004 Method 'Range' of Object'_Global' Failed 错误。

Sub dataEntry(agent As Integer, month As Integer)

Dim lookupReturn As Integer
Dim i As Integer
Dim lookupValue As String
Dim lookupBook As String

i = 1
'set excel book to preform vlookup within
lookupBook = sheetName & "-Daily Report Daily-Monthly Grid.xlsx"

'Preforms a Vlookup to fill in data points
Do While Workbooks("Cumulative Agent Ranking Template").Sheets(sheetName).Cells(i,     1).Value <> ""
    lookupValue = Workbooks("Cumulative Agent Ranking Template").Sheets(sheetName).Cells(i, 10).Value
    lookupReturn = Sheets(sheetName).WorksheetFunction.VLookup(Range("C2"), [lookupBook] & sheet33 & Range("!$A$2" & ":$C" & agent), 2, False)
    Workbooks("Cumulative Agent Ranking Template").Sheets(sheetName).Cells(i, 11).Value = lookupReturn
    i = i + 1
    lookupValue = ""
    lookupReturn = 0
Loop

【问题讨论】:

  • 您有机会查看我的回答吗?它对你有用吗?如果是这样,请将其标记为已接受,以便其他人可以从此问答中受益...

标签: vba excel excel-2010 vlookup


【解决方案1】:

我认为这里可能有很多问题。

让我们从最明显的 1004 错误来源开始,即不合格的范围对象。

示例:在标准模块中,Range("C2") 始终指代活动工作表。在工作表模块中,它总是引用父工作表。

解决:完全限定您的范围变量,例如,Workbooks(_name_).Worksheets(_sheetname_).Range("C2")

我注意到的另一个潜在问题是您调用Vlookup 的方式。

Sheets(sheetName).WorksheetFunction...

工作表对象没有这样的方法WorksheetFunction。这是一个应用程序级别的方法,所以调用它:

WorksheetFunction.Vlookup...

其他问题或潜在问题

未声明的变量:sheetname(也许这是一个公共或模块级变量?)

未使用的变量:lookupValue 你已经声明了这个,你已经给它赋值了,但是你还没有对它做任何事情 或者在代码的任何其他地方使用它。 这是您尝试搜索的值吗?

您的公式的其余部分也很粗糙,我什至不会尝试将其修复为当前状态。如果您使用定义更好的对象变量,您的代码将更容易阅读和理解。如果变量在声明中是强类型的,您也将从智能感知中受益。

这是一个示例,我将留给您自己解决:

Dim lookupBook as Workbook
Dim lookupRange as Range
Dim lookupValue as String

Set lookupBook = Workbooks("some other file.xlsx")
Set lookupRange = lookupBook.Worksheets("some worksheet").Range("A1:B50")
lookupValue = "cat"

Range("A1").Value = WorksheetFunction.Vlookup(lookupValue, lookupRange, 2, False)

【讨论】:

  • 感谢您的帮助,正如您所见,在 VBA 方面我非常“绿色”。我确实将我的编码更改为更像示例;但是,我遇到的问题是每个月我要搜索的工作簿都会发生变化。我试图使用一个变量来调用工作簿。这是我想出的,但它不起作用。 Set lookupBook = Workbooks(sheetName & "-Daily Report Daily-Monthly Grid.xlsx")... sheetName 包含一个特定于每月创建的每个新文件的前缀。
  • 请求的工作簿是否已经打开? (如果是,那么你拼错了一些东西;如果不是,那么你必须先打开它)。您可以使用 Workbooks.Open(_full_path_to_file_) 声明来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多