我正在构建一个电子表格宏,它根据条件将一个名为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
我收到的错误是
运行时错误,说对象不支持属性或方法。
感谢任何帮助!
答案 0 :(得分:0)
您工作表对象的Call
方法似乎导致问题。
您试图通过将 SUB 用作工作表的子对象来调用 SUB :
Call Worksheets("WORK").Delete_Blank_Rows
需要更改为
Delete_Blank_Rows
另外,请删除Call
关键字。你不需要它。
Call Statement (Visual Basic)
您可以在调用程序时使用
Call
关键字。对于大多数过程调用,您不需要使用此关键字。当被调用的表达式不以标识符开头时,通常使用
Call
关键字。建议不要将Call
关键字用于其他用途 。