Excel宏用于数据分析

时间:2018-02-09 17:10:02

标签: excel vba excel-vba

我正在构建一个电子表格宏,它根据条件将一个名为DATA的电子表格中的单元格复制到一个名为REPORT的标签中。如果条件更改,列表将清除,并添加符合新条件的值。宏是:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("B2:C5")

    If Not Application.Intersect(KeyCells, Target) _
           Is Nothing Then
           For iRow = 2 To 5845
        If Worksheets("DATA").Range("F" & iRow).Value = False Then
        'Do nothing
        Else
            Worksheets("WORK").Cells(iRow, 1).Value = Worksheets("DATA").Cells(iRow, 4).Value
        End If
    Next iRow
    End If
     Call Worksheets("WORK").Delete_Blank_Rows
     Sheets("REPORT").Range("E1:E5845").Value = Sheets("WORK").Range("A1:A5845").Value
     Worksheets("REPORT").Columns(6).ClearContents
End Sub

Sub Delete_Blank_Rows()
  On Error Resume Next
  With Worksheets("WORK").Range("A2:A5845")
    .Value = .Value
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  End With
End Sub

电子表格位于:https://drive.google.com/file/d/1G-RQ9DvGKa_EEapcLIWDf3_SCdql_dJJ/view?usp=sharing

我收到的错误是

  

运行时错误,说对象不支持属性或方法。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您工作表对象的Call方法似乎导致问题。

您试图通过将 SUB 用作工作表的子对象来调用 SUB

Call Worksheets("WORK").Delete_Blank_Rows

需要更改为

Delete_Blank_Rows

另外,请删除Call关键字。你不需要它。

  

Call Statement (Visual Basic)

     

您可以在调用程序时使用Call关键字。对于大多数过程调用,您不需要使用此关键字。

     

当被调用的表达式不以标识符开头时,通常使用Call关键字。建议不要将Call关键字用于其他用途