簡體   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