【问题标题】:VBA runtime error 1004 with offset带有偏移量的 VBA 运行时错误 1004
【发布时间】:2015-08-21 15:17:12
【问题描述】:

我有一个工作簿,其中包含来自所有分支机构的所有发票的列表,我们称之为“一切”,基本上我需要搜索是否在包含每个分支机构发票的另一个文件中找到发票。它实际上是每个分支的文件,每个文件按月用工作表划分,我需要检查每个工作表,然后在单元格中插入一个值。让我们将其称为“0001”,以此类推每个分支。

“所有”文件基本上包含一列分行编号、一列发票编号、一列发行人代码和一列是否在分行文件中找到。分支文件除了分支编号之外包含相同的内容,最后一列说明发票是否在“Everything”文件中。在某些情况下,发票在分支文件上而不在“所有文件”上,也有发票在所有文件上而不在分支文件上的情况。

添加“是”或“否”的代码部分可以,但是在分支文件中找到发票编号后,我需要检查其发行者是否与 Everything 文件中的相同,并且我正在运行-time 错误 1004。你能帮帮我吗?这是代码中的一个示例:

Dim cnpj as range
Dim NFE as range

Set NFE = sh.Columns(colSrch).Find(valorprocurado, LookIn:=xlValues, lookat:=xlWhole)
If Not NFE Is Nothing And Range(NFE).Offset(, 8) = cnpj Then

错误出现在代码的最后一行。在它的开头,我使用 Everything 文件设置了 cnpj,它似乎正在工作。怎么了?

【问题讨论】:

  • 如果 NFE 什么都不是,它会抛出一个错误。 VBA 测试 IF 语句的两个部分,而不考虑另一个的结果。尝试为第二部分嵌套另一个 if 语句。 {if not NFE is Nothing then IF range(NFE).offset(,8) = cpnj then}
  • @ScottCraner 成功了!!!!!!
  • 既然有效,请将其标记为已回答

标签: vba excel runtime-error offset


【解决方案1】:

我想你可以把最后一行写成

如果不是 NFE 什么都不是,而 NFE.Offset(, 8) = cnpj 则

【讨论】:

    【解决方案2】:

    正如 Scott 建议的那样,我做了第二个 if 语句嵌套在第一个语句中,并且它起作用了。非常感谢您的帮助!

    代码保持这样:

    Dim cnpj as range
    Dim NFE as range
    
    Set NFE = sh.Columns(colSrch).Find(valorprocurado, LookIn:=xlValues, lookat:=xlWhole)
    If Not NFE Is Nothing
    if Range(NFE).Offset(, 8) = cnpj Then
    blablabla
    end if
    end for
    end if
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多