excel - 获取应用程序定义或用户定义的错误

标签 excel vba

我绞尽脑汁想弄清楚为什么我会收到错误 1004。我有一个带有唯一标识符的工作表,我需要在另一个工作表中找到它,然后在该行的不同列中返回一个值,它似乎是 WorksheetFunction.Index+Match。我需要的数据偏移一列(因此是 Count_2 - 1)。我已经声明了变量,甚至解锁了表格以防万一。我知道我可以在 excel 中使用索引匹配,但我正在尝试使用 vba 进行所有计算,这样最终用户就不会搞砸任何事情,这样更容易看到工作簿实际在做什么。有任何想法吗?

另外,我一直将其设置为将数字打印到特定单元格,以便我可以更轻松地查看代码在哪里死亡。

For Count_1 = 2 to 51

    For Count_2 = 4 To 44

        Sheet8.Cells(Count_1, Count_2) = WorksheetFunction.Index(Sheet7.Range(Cells(47, Count_2 -1), _
        Cells(904, Count_2 - 1)), WorksheetFunction.Match(Sheet8.Cells(Count_1, 1).Value, _
        Sheet7.Range("A47:A904"), 0))

        Count_3 = Count_3 + 1
        Sheet1.Range("D1") = 2

    Next

Next

最佳答案

  • Cells(47, …Sheet7.Range 不引用同一工作表您必须为每个 Cells 指定一个工作表也反对。喜欢:…Sheet7.Range(Sheet7.Cells(47, …
  • WorksheetFunction.Match如果没有任何东西会抛出错误。所以你需要捕获那个案例并决定在没有匹配的情况下该怎么做。
  • 我建议始终激活 Option Explicit : 在 VBA 编辑器中转到工具 › 选项 › Require Variable Declaration并正确声明所有变量。
  • 编号变量名称,如 Count_1Count_2非常糟糕,因为很快就会混淆。而是始终使用有意义的变量名称,例如 iRowiColumn .

  • 所以你最终会得到类似的东西:
    Option Explicit
    
    Public Sub Example()
        Dim CellsProcedured As Long
    
        Dim iRow As Long
        For iRow = 2 To 51
    
            Dim iColumn As Long
            For iColumn = 4 To 44
    
                Dim MatchResult As Double
                On Error GoTo NO_MATCH
                MatchResult = Application.WorksheetFunction.Match(Sheet8.Cells(iRow, 1).Value, Sheet7.Range("A47:A904"), 0)
                On Error GoTo 0
    
                On Error GoTo NO_INDEX
                Sheet8.Cells(iRow, iColumn) = Application.WorksheetFunction.Index(Sheet7.Range(Sheet7.Cells(47, iColumn - 1), Sheet7.Cells(904, iColumn - 1)), MatchResult)
                On Error GoTo 0
    
                CellsProcedured = CellsProcedured + 1
                Sheet1.Range("D1") = 2
    
            Next iColumn
        Next iRow
    
    
        Exit Sub
    
    NO_MATCH:
        MsgBox "The value '" & Sheet8.Cells(iRow, 1).Value & "' was not found in Range A47:A904. Aborting."
    
        Exit Sub
    
    NO_INDEX:
        MsgBox "Index failed at cell(" & iRow & ", " & iColumn & "). Aborting."
    End Sub
    

    关于excel - 获取应用程序定义或用户定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666780/

    相关文章:

    vba - Excel - 使用完整路径名关闭/保存

    vba - 显示宏选项

    excel - 如何根据相同的唯一标识符将 Excel 工作表的一列放入另一列

    vba - 发送具有多个 RangeToHTML 范围的电子邮件

    ms-access - 如何通过 VBA 在 Access 报表上创建控件?

    excel - 如何使用VBA选择带有Range的整个Excel工作表?

    vba - 如何使用 VBA 修剪 MS Word 中的表格单元格值

    excel - 尝试对三个不同值的数据进行排序时出现运行时错误 1004

    excel - Excel计算一个单元格中的多个字母

    R - xlsx包 - 如何在不改变边框的情况下添加单元格颜色