【问题标题】:VBA Runtime Error 1004 “Application-defined or Object-defined error” when using Index Range function使用索引范围函数时 VBA 运行时错误 1004“应用程序定义或对象定义错误”
【发布时间】:2017-04-13 19:21:35
【问题描述】:

在我的宏中,我有以下代码:

Set v = Application.WorksheetFunction.Index(Worksheets("Sheet2").Range(Cells(2, 1), Cells(33, 3)), Application.WorksheetFunction.Match(1, (Worksheets("Sheet2").Range(Cells(2, 1), Cells(33, 1)) = Osheet.Cells(i, 2).Value) * (Worksheets("Sheet2").Range(Cells(2, 2), Cells(33, 2)) = Left(Osheet.Cells(5, 6).Value, 1)), 0), 3)

数据最初位于表 1(这是代码中使用的 Osheet),从中选择了 2 个参数并使用索引匹配函数从表 2 中获取数据。

运行宏时,显示运行时错误 1004、应用程序定义或对象定义错误。

任何帮助将不胜感激。

【问题讨论】:

  • 没有数据示例,我无法重现您的问题。但是,除了正确限定范围引用之外,正如@Vityata 所指出的,我不清楚您的公式是否返回一个对象,但您正在使用Set。此外,您的公式中有一些布尔比较。他们在做什么?
  • @RonRosenfeld 表 2 包含以下数据 Farbe 尺寸 SKU 代码 weiß S 5671 weiß M 5672 weiß L 5673 weiß XL 5674 表 1 包含选定产品的订单数量。因此,此代码的目标是找到相应的 SKU 代码(来自 Sheet2),其中在工作表 1 中有相应的订单记录。此 SKU 代码被传递给 Set v = & 然后进一步的 v 被发送到另一个工作表以进行其他流程.希望我在这里有意义。如果您理解我的问题,请提供帮助。
  • 正如我所写的,如果没有可以下载到 Excel 中的数据,我什至不会尝试重现您的问题。但是Set 关键字用于对象。 SKU 代码通常是字符串变量,我不确定您的公式返回的是什么,但其中一部分正在生成布尔值。
  • 尝试解释如何可能重现问题,否则它似乎是调试代码的问题..
  • 除了不合格的Cells之外,看起来问题是因为我认为VBA无法处理的数组操作(例如Range(Cells(2, 1), Cells(33, 1)) = Osheet.Cells(i, 2).Value)。

标签: vba excel


【解决方案1】:

快速猜测:

with Worksheets("Sheet2")
    Set v = Application.WorksheetFunction.Index(.Range(.Cells(2, 1), .Cells(33, 3)), Application.WorksheetFunction.Match(1, (.Range(.Cells(2, 1), .Cells(33, 1)) = Osheet.Cells(i, 2).Value) * (.Range(.Cells(2, 2), .Cells(33, 2)) = Left(Osheet.Cells(5, 6).Value, 1)), 0), 3)
end with

诀窍是您也应该将电子表格的引用提供给单元格/范围。只是一个VBA的东西! :)

更多信息请见 Msdn https://msdn.microsoft.com/en-us/library/office/ff196273.aspx

【讨论】:

  • 感谢您的及时帮助,我在代码中尝试了相同的操作并重新运行了宏.....但是显示了相同的错误
  • @AjayBansal - Vityata 在行尾错过了几个不正确的引用。我刚刚编辑了答案,所以现在再次尝试复制它。 (我们的假设是基本公式是正确的,只是不合格的Cells 引用导致了问题。)
  • @YowE3K,感谢您编辑代码。不幸的是,显示相同的错误1004
  • @AjayBansal 好的,在这种情况下,我们需要更仔细地查看您在公式中尝试执行的操作。 (顺便说一句 - 您是否尝试过在 Excel 本身中执行与您的公式等效的操作,只是为了确保它是合乎逻辑的?)如果您更新问题以说明您的公式试图做什么,这可能会有所帮助。
  • @YowE3K。我在 Excel 中尝试过公式。在excel中,写完公式后,必须使用CTRL+ SHIFT+ ENTER键&大括号{}会自动显示在公式中。如果不使用它,Excel 公式将不起作用。我无法找到我需要在这里执行的任何相应步骤。基本上,我试图根据工作表 1 中的项目订单 rcvd 从工作表 2 中查找 SKU 代码。如果找到项目订单,则使用项目详细信息(代码中的 2 个变量)从工作表 2 中查找 SKU 代码并将其传递给 v。然后v 被发送到另一个工作表以进行进一步处理。希望这能清除。
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多