Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA运行时错误91“;对象变量或未设置块变量";_Excel_Runtime Error_Vba - Fatal编程技术网

Excel VBA运行时错误91“;对象变量或未设置块变量";

Excel VBA运行时错误91“;对象变量或未设置块变量";,excel,runtime-error,vba,Excel,Runtime Error,Vba,我已经为这个问题挣扎了一段时间,但没有成功。我编写了一个代码来从数据库导入一些数据,但问题是它们有不同的格式。因此,我编写了一节,它将遍历另一个库,并以正确的顺序返回数据(这不是全部代码。我已经为对象完成了所有正确的set语句): 这就是导致错误的块,特别是“col”变量行。该行的作用是从另一个工作表中的工作表中查找列标题,并存储列的编号。 对于i=1和2,该循环工作正常,但在第三次迭代时,我得到了错误。您需要将wb\u verificar设置为Dim语句和使用该对象的任何语句之间的值 可能还有

我已经为这个问题挣扎了一段时间,但没有成功。我编写了一个代码来从数据库导入一些数据,但问题是它们有不同的格式。因此,我编写了一节,它将遍历另一个库,并以正确的顺序返回数据(这不是全部代码。我已经为对象完成了所有正确的set语句):

这就是导致错误的块,特别是“col”变量行。该行的作用是从另一个工作表中的工作表中查找列标题,并存储列的编号。
对于i=1和2,该循环工作正常,但在第三次迭代时,我得到了错误。

您需要wb\u verificar设置为Dim语句和使用该对象的任何语句之间的值


可能还有其他错误。

问题在于.find方法。考虑到工作表函数vlookup和match在该单元格上工作正常,我无法找出它失败的原因。我编写了一个基本的自定义搜索函数来查找“col”,从而解决了这个问题。另一种选择是使用
应用程序.worksheetfunction.match

方法,但它比自定义函数慢,考虑到初始数据库的大小,自定义函数会产生明显的差异。

我假设,这不是您的全部代码,并且在某些地方有工作簿和工作表对象的“set”语句。错误消息将指出这些对象之一未“设置”。因此,它看起来要么缺少一个set语句,要么“set”失败,因为您试图分配给它的对象不存在,尽管如果是这种情况,我希望它在set语句本身中出错。完整的代码是否太大,您能否确认Set语句发生在哪里,是否有其他相关的逻辑可能会影响它们?是的,完整的代码确实有点长。但是,所有工作簿和工作表变量之前都已设置,这一点可以通过以下事实得到证实:该for循环在前两次迭代中工作良好。代码的其余部分是相当模块化的,几乎没有其他内容影响这个循环。由于错误发生在循环之间,所有其他变量都是常量。您应该尝试隔离您的问题,并生成一个最小的工作示例。发布不再现错误的代码片段通常不会吸引许多人来帮助解决您的问题。根据您提供的信息,最好的猜测是您在代码中的某个位置缺少一个
set
关键字,或者您的
Find
语句没有找到您要求的内容。我已经意识到问题所在。似乎.find方法在一个特定的细胞上出现了问题,尽管我不知道为什么。通过自定义搜索功能解决了这个问题。谢谢你的提示,鲁桑,我将来会更加注意再现性。@AndréMuraro,祝贺你克服了这个问题。你应该发布自己的答案并接受它。这样,未来的用户就可以非常快速、轻松地知道,而无需阅读所有评论。另一个很好的理由是,那些试图提供帮助的人(像我一样,现在)不必通读所有的评论来发现你真的不需要帮助。请记住,这篇文章将持续很长时间。它将只是坐在未回答的问题中,反复阅读。
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