2014-12-23 217 views
0

我一直在努力与此一段时间没有成功。我编写了一个代码来从数据库导入一些数据,并增加了他们有不同格式的问题。所以我写了一个部分,其将经过其他基地,并把数据传回正确的顺序(即不是整个代码,我已经做了所有正确的一组语句的对象。):VBA运行时错误91“对象变量或块变量未设置”

Dim wb_atual, wb_verificar As Workbook 
Dim sheet_atual, sheet_verificar As Worksheet 
Dim choice, lin_max, lin_b_max, col, col_id, col_max, i, j, k As Integer 
Dim is_equal As Boolean 

     For i = 1 To col_max 
      col = wb_verificar.Sheets(sheet_verificar.Name).Range("1:1").Find(wb_atual.Sheets(sheet_atual.Name).Cells(2, i).Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlNext).Column 
      sheet_atual.Cells(j, i).Value = sheet_verificar.Range(sheet_verificar.Cells(j - 1, col), sheet_verificar.Cells(j - 1, col)).Value 
      lin_b_max = lin_b_max + 1 
     Next i  

也就是说导致错误的块,特别是“col”变量行。该行的功能是从另一个工作表中查找列标题,并存储该列的编号。 该循环适用于i = 1和2,但在第三次迭代时出现错误。

预先感谢任何帮助

+0

我假设,这不是所有的代码和某处有工作簿和工作表对象的“设置”语句。该错误消息将指出这些对象中的一个未被“设置”的事实。所以它看起来像是缺少一个set语句,或者“set”失败,因为你试图分配给它的对象不存在,尽管如果是这样的话,我会预期它会在set语句本身中出错。完整的代码是否需要大量发布,您是否可以确认Set语句发生的位置,是否还有其他可能影响它们的相关逻辑? –

+0

是的,完整的代码确实有点长。但是,所有的工作簿和工作表变量都已经在之前设置好了,这可以通过前两次迭代的循环工作证实。其余的代码是非常模块化的,没有什么影响这个循环。由于循环之间发生错误,所有其他变量都是常量。 –

+0

你应该尝试隔离你的问题,并产生一个最小的工作示例。发布代码片段,不重现错误通常不会吸引很多人协助解决您的问题。根据您提供的信息,最好的猜测是您缺少'set'关键字,在代码* unseen *中的某处,或者您的'Find'语句没有找到您要求的内容。 –

回答

0

问题出在.find方法。我无法弄清楚为什么它失败了,因为工作表函数vlookup和匹配在该单元格上工作正常。我通过编写一个基本的自定义搜索功能找到“col”来解决这个问题。另一种方法是使用application.worksheetfunction.match 方法,但它比自定义函数慢,这在给定初始数据库大小的情况下会产生显着差异。

0

需要设置wb_verificar昏暗声明和使用对象的任何语句之间的值。

可能存在其他错误。

相关问题