繁体   English   中英

Excel VBA - 删除时间值小于的单元格

[英]Excel VBA - delete cell with time value less then

我正在尝试根据“J”列中的时间值删除特定范围。 到目前为止,我得到了这个:

Dim wb As Workbook
Dim c As Range
Dim zakres As Range
Dim zakres2 As Range
Dim all As String
Dim all2 As Range
Dim ile As String
Dim czas As Range

Set wb = ThisWorkbook
Set czas = wb.Worksheets("Dane").Range("J2")

ile = Application.WorksheetFunction.CountA(wb.Worksheets("Dane").Range("L:L"))

For i = 1 To ile
    If czas.Value < "00:01:00" Then
        Set zakres = czas.Offset(0, 0)
        Set zakres2 = czas.Offset(0, 2)
        all = zakres.Address & ":" & zakres2.Address
        Set all2 = Range(all)
        all2.Delete Shift:=xlUp
    Else
        Set czas = czas.Offset(1, 0)
    End If
Next i

If czas.Value < "00:01:00" Then我收到 424 运行时错误 - 需要 Object。 这让我很困惑,因为变量czas已经被声明了......

任何想法为什么会发生以及如何处理它?

当您删除包含范围czas的行时,您也会删除该范围 object。 null 范围没有属性.value这就是为什么您会收到 object required 错误。

批量删除范围 object 的一个好方法是使用union创建非连续范围,然后一次将它们全部删除。 这样可以避免在循环中移动行的怪异之处,并且还会显着提高速度,因为删除非常昂贵。

Dim wb As Workbook
Dim c As Range
Dim zakres As Range
Dim zakres2 As Range
Dim ile As String
Dim czas As Range
Dim i As Long
Dim delrng As Range

Set wb = ThisWorkbook
Set czas = wb.Worksheets("Dane").Range("J2")

ile = Application.WorksheetFunction.CountA(wb.Worksheets("Dane").Range("L:L"))

For i = 1 To ile
    If czas.Value < "00:01:00" Then
        Set zakres = czas.Offset(0, 0)
        Set zakres2 = czas.Offset(0, 2)
        If delrng Is Nothing Then
            Set delrng = Range(zakres, zakres2)
        Else
            Set delrng = Union(delrng, Range(zakres, zakres2))
        End If
    End If
    Set czas = czas.Offset(1, 0)
Next i
If Not delrng Is Nothing Then
    delrng.Delete
end if

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM