繁体   English   中英

VBA 行删除排序

[英]VBA Row Delete and Sort

我有两个看似无法解决的问题。 首先是我无法放置的类型不匹配。 (错误 13)

目标是删除数据块之间范围内的每个空行。 我调用的每个变量(i、y 和行)都已定义。 我或行不应该是多头吗?

第二条线告诉我我需要一个 object,它在我尝试解决问题 1 之前工作正常,甚至从未碰过它。 (错误 424)

这个我真的想不通。 如果我已经告诉它 select 活动工作表的使用范围并按升序排序,然后按两个不同的值降序排序,我不知道它要我调用什么 object 。 工作表有标题,按时间排序,然后是日期。

Sub Import()

    Dim xSht As Worksheet, xWb As Workbook
    Dim xFileDialog As FileDialog, f, i, rows, r As Long
    Dim xStrPath As String, xFile As String
    Dim y As Range
    
    Dim iCntr
    Dim rng As Range
    Set rng = Range("A10:D20")

    Application.ScreenUpdating = False
   
.
.
.
.
.
        Set y = Range("A1:D2000")


        For i = y.Row + y.rows.Count - 1 To y.Row Step -1
        If Application.WorksheetFunction.CountA(rows(i)) = 0 _
        Then rows(i).EntireRow.Delete
        Next
        
        

    Worksheets("BY SHIFT").Activate

        
    Worksheets("BY SHIFT").Sort.SortFields.Clear
    ActiveWorksheet.UsedRange.Sort Key1:=Range("C1"), Key2:=Range("B1"), Header:=xlYes, _
    Order1:=xlAscending, Order2:=xlDescending

    
    Worksheets("2718").Activate

    
    Application.ScreenUpdating = True

End Sub

Rows()没有显式父级 object 是一个需要数组的 function, i是一个 long。 您需要像ActiveSheet.Rows(i)这样的东西,它将访问工作表 object 的特定行。这就是类型不匹配错误。

ActiveWorksheet不是一个东西,你想要ActiveSheet ,或者更好的是明确引用特定的工作表。 这是你的 424 错误,Use Option Explicit你会得到一个应该更清楚的编译错误,这是一个很好的做法。

i = y.Row + y.rows.Count - 1评估为y.rows.Count您可以省略数学。

我在您的排序中添加了With语句并删除了ActiveSheet引用。

原因请看这里: How to avoid using Select in Excel VBA

Sub Import()
    Dim y As Range
    Dim i As Long

    Application.ScreenUpdating = False
   
    Set y = Range("A1:D2000")

    For i = y.rows.Count To y.Row Step -1
        If Application.WorksheetFunction.CountA(ActiveSheet.rows(i)) = 0 Then
            ActiveSheet.rows(i).EntireRow.Delete
        End If
    Next

    With Worksheets("BY SHIFT")
        .Sort.SortFields.Clear
        .UsedRange.Sort Key1:=.Range("C1"), Key2:=.Range("B1"), Header:=xlYes, _
        Order1:=xlAscending, Order2:=xlDescending
    End With
    
    Worksheets("2718").Activate
    
    Application.ScreenUpdating = True

End Sub

暂无
暂无

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

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