[英]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.