Excel VBA清除选定的行

时间:2016-01-31 20:31:27

标签: excel vba

您好我正在尝试构建一个使用Application.Ontime填充行的计时器,但如果它们超过30分钟就会清除它们。这样我就可以无限期地运行计时器,而不会累积超过30分钟的数据并导致系统崩溃。到目前为止,我可以成功地每秒创建一个新的数据行。

我在A上有一个时间列,而B列是一个带有1或0的标记,表示该行是否超过30分钟。其他列有数据。 我希望我的宏从第一个数据行(第10行)向下看,找到非空白的第一行(尚未清除)并且在B列中有一个1(超过30分钟)然后清除排。所有其他行应不受影响,并保留在新消隐的空间下方。

应该只有一行带有标记,因为它会每秒运行一次。

我想保持它干净并使用rows.clear因为选择和删除似乎会使这个过程减慢很多..

非常感谢任何帮助,谢谢。

编辑:抱歉由于缺乏清晰度,变得模糊。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

Sub Clear()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim Lastrow As Long
Dim i As Long

Set wb = ThisWorkbook
Set ws1 = wb.Sheets("Sheet1") 'Change the name of your sheet

Lastrow = ws1.Range("A1").SpecialCells(xlCellTypeLastCell).Row

With ws1

i = 10
    Do
            If .Cells(i, "B") = 1 Then
                .Cells(i, "B").EntireRow.ClearContents
                '.Cells(i, "B").EntireRow.Delete
            End If

        i = i + 1
    Loop Until i > Lastrow
End With

End Sub

修改#1

基于以下评论:

Sub Clear()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim Lastrow As Long
Dim i As Long

Set wb = ThisWorkbook
Set ws1 = wb.Sheets("Sheet1") 'Change the name of your sheet

Lastrow = ws1.Range("A1").SpecialCells(xlCellTypeLastCell).Row

With ws1

i = 1
TimeLimit = Time - TimeSerial(0, 30, 0)' Time limit NOW - 30 minutes
    Do

            If .Cells(i, "A") < TimeLimit Then ' If value in column A is less then the Timelimit then
                .Cells(i, "A").EntireRow.ClearContents
            End If

        i = i + 1
    Loop Until i > Lastrow
End With

End Sub