“运行时错误1004:sorting引用无效”

我从这个网站复制了一些代码,我想这会解决一个我正在试图解决的问题。 我从使用sorting在VBA中的原始代码复制了一个范围,我所做的变化很less,只是将数据的左上angular定义为在单元格A3中。 最终的代码如下运行:

Sub sortOnlySelectedArea() Dim actSheet As Worksheet Dim upper, lower As Integer Dim tempString As String Dim selectedArea As Range Set actSheet = Application.Worksheets("Sheet1") ' here you have to put in your part to make the right 'actSheet.Range("E5:G6").Select ActiveSheet.Range("a3").CurrentRegion.Select Set selectedArea = Selection upper = selectedArea.Row lower = upper + selectedArea.Rows.Count - 1 tempString = "F" & CStr(upper) & ":F" & CStr(lower) actSheet.Sort.SortFields.Clear actSheet.Sort.SortFields.Add Key:=Range(tempString), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With actSheet.Sort .SetRange selectedArea .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

我的问题是,代码几乎在最后失败。 我已经通过了代码,它正确地拿起数据区域。 它到达最后只有一行(.Apply),然后突出显示。 debugging消息指示运行时错误1004:sorting引用无效。 我不能很好地跟踪代码,看看如何selectsorting范围。 理想情况下,我希望能够对C列进行sorting,但如果有必要的话,可以列入A列。 我试图分类的范围是A3:F105。

也许这是你需要的更多…

 Sub someSortRoutine() Dim sortsheet As Worksheet Dim sortArea As Range Dim keyColumn As Range Set sortsheet = Application.Worksheets("Sheet1") Set sortArea = sortsheet.Range("a3").CurrentRegion Set keyColumn = Application.Intersect(sortsheet.Range("F:F"), sortArea) sortsheet.Sort.SortFields.Clear sortsheet.Sort.SortFields.Add Key:=keyColumn, _ SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal With sortsheet.Sort .SetRange sortArea .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

当我的区域没有在F列中包含任何数据时,我能够重新创build运行时错误1004。

该线

 tempString = "F" & CStr(upper) & ":F" & CStr(lower) 

正在确定sorting栏。 如果你改变F到AI认为这将列A列。

我会理所当然地知道CurrentRegion属性如何表示一个或多个指定单元格周围的数据岛。 您的sorting操作的成功将取决于此。

对我来说最明显的潜在冲突是告诉actSheet表示Sheet1,但随后告诉actSheetsorting在ActiveSheet上选定的当前区域。 这些不一定是相同的工作表。

以下尝试将实际sorting例程的替代编码方法合并到工作表中。

 Sub sortOnlySelectedArea() With Worksheets("Sheet1").Range("a3").CurrentRegion .Cells.Sort Key1:=.Columns(6), Order1:=xlAscending, _ Orientation:=xlTopToBottom, Header:=xlYes End With End Sub 

该子的名称是欺骗性的,因为您的原始select了活动工作表的A3单元格中的.CurrentRegion ,但它执行相同的操作。 如前所述, ActiveSheetWorksheets("Sheet1")有一些混淆。 你需要select一种参考方法并坚持下去。 来回跳动只会导致冲突,而这些冲突可能无法在所有时间内自我复制(例如仅当Sheet1 不是活动工作表时)。

最后,让Excel 猜测你是否有一个标题行不是一个好主意。 你应该知道你是否做。