我是Excel VBA的新手。这看起来应该很简单。 我需要从Access数据库中排序电子表格。Excel VBA排序
这是我的代码。
目前我收到1004错误。 “myRange =范围(选择)”的“对象范围_Global失败的方法”
任何帮助,非常感谢。
Sub sortBacklog()
Dim appExcel As Excel.Application
Dim myWorkbook As Excel.Workbook
Dim myWorkSheet As Worksheet
Dim myRange As Range
Set appExcel = CreateObject("Excel.Application")
Set myWorkbook = appExcel.Workbooks.Open("C:\Users\gephilli\Desktop\Dispatch\SAP_Backlog.xls")
Set myWorkSheet = myWorkbook.Sheets(1)
myWorkSheet.Activate
myWorkSheet.Select
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
myRange = Range(Selection)
myWorkSheet.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("PLS Depot Backlog Report").Sort.SortFields.Add Key _
:=Range("F2:F20491"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("PLS Depot Backlog Report").Sort
.SetRange Range(myRange)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
appExcel.Quit
Set myWorkSheet = Nothing
Set myWorkbook = Nothing
Set appExcel = Nothing
End Sub
1)[**避免使用Select /主动陈述**](http://stackoverflow.com/options/10714251/excel-macro-avoid-using-select)2)将'myRange = Range(Selection)'改为'Set myRange = Selection' –
并将'.SetRange Range(myRange)'改为'.SetRange myRange '。还有一件事 - 使用'xlDown'和'xlToRight'不可靠。阅读此答案[**如何确定最后一行/列**](http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba/11169920#11169920) –