【发布时间】:2021-10-07 17:22:42
【问题描述】:
在使用前几张表中的数据制作了几张新表之后,我希望宏按字母顺序对新表上的数据进行排序。问题似乎在于这些新数据的大小并不总是相同的。
Dim New_Products As Range
Dim New_Sheets As Worksheet
[...]
For Each New_Sheets In Worksheets
If New_Sheets.Name <> "Sheet1" And New_Sheets.Name <> "Sheet2" Then
New_Sheets.Activate
Set New_Products = Range("A1", Range("A1").End(xlToRight).End(xlDown))
New_Sheets.Sort.SortFields.Clear
New_Sheets.Sort.SortFields.Add2 Key:=Range("A2", Range("A2").End(xlDown)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With New_Sheets.Sort
.SetRange Range("A1", Cells(Range("A1").End(xlDown).Row, Range("A1").End(xlToRight).Column))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next New_Sheets
当我尝试运行宏时,我得到:
Run-time error '1004'
The sort reference is not valid. Make sure that it's within the data you want to sort, and the first Sort By box isn't the same or blank.
【问题讨论】:
-
应该
SetRange是NewProducts? -
不要使用
.Activate而不是使用New_Sheets引用所有您的Range和Cells对象,例如New_Sheets.Range和New_Sheets.Cells来制作您的代码可靠。 -
@Nathan_Sav 它应该是,但它之前没有工作,这就是我删除它的原因。我应该重新添加它吗?
标签: excel vba sorting foreach runtime-error