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