Sorting excelvba排序
我是Excel VBA新手。这看起来应该很简单。 我需要从Access数据库中对电子表格进行排序 这是我的密码 目前我得到一个1004错误。“myRange=Range(Selection)”上对象范围的方法\u Global失败 非常感谢您的帮助Sorting excelvba排序,sorting,excel,vba,Sorting,Excel,Vba,我是Excel VBA新手。这看起来应该很简单。 我需要从Access数据库中对电子表格进行排序 这是我的密码 目前我得到一个1004错误。“myRange=Range(Selection)”上对象范围的方法\u Global失败 非常感谢您的帮助 Sub sortBacklog() Dim appExcel As Excel.Application Dim myWorkbook As Excel.Workbook Dim myWorkSheet As Worksheet Dim myRang
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
通常不需要在VBA中选择任何内容。录制的宏就是这样做的,但这不是有效的方法。尝试: 设置myrange=Sheet1.范围(“B1”,Sheet1.范围(“B1”).结束(xlDown).结束(xlToRight))
您看到的问题实际上可能是发生错误的行中缺少“set”。如果没有“set”,excel会尝试处理范围内容,而使用“set”则会处理范围对象本身 考虑到注释和更好的实践,我用注释重新编写了您的代码:
Sub sortBacklog()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Changed to late binding - no need to set reference to Excel '
'and not reliant on a specific version of Excel. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim appExcel As Object
Dim myWorkbook As Object
Dim myWorkSheet As Object
Dim myRange As Object
Set appExcel = CreateObject("Excel.Application")
'appExcel.Visible = True
Set myWorkbook = appExcel.Workbooks.Open("C:\Users\gephilli\Desktop\Dispatch\SAP_Backlog.xls")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'You may want to change this to look at a named sheet.
'e.g. myWorkbook.Sheets("PLS Depot Backlog Report") '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set myWorkSheet = myWorkbook.Sheets(1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Everything between 'With' and 'End With' that '
'starts with a . (period) will apply to myWorksheet. '
''''''''''''''''''''''''''''''''''''''''''''''''''''''
With myWorkSheet
'''''''''''''''''''''''''''''''''''''''''''
'Get range from B1 to last cell on sheet. '
'''''''''''''''''''''''''''''''''''''''''''
Set myRange = .Range(.Cells(1, 2), .Cells(.Cells.Find("*", , , , 1, 2).Row, .Cells.Find("*", , , , 2, 2).Column))
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Everything between 'With' and 'End With' that '
'starts with a . (period) will apply to myWorksheet.Sort. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With .Sort
.SortFields.Clear
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'As using late binding Access won't understand Excel values so: '
'xlSortOnValues = 0 xlYes = 1 '
'xlAscending = 1 xlTopToBottom = 1 '
'xlSortNormal = 0 xlPinYin = 1 '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
.SortFields.Add _
Key:=myRange.offset(, 6).Resize(, 1), _
SortOn:=0, _
Order:=1, _
DataOption:=0
.SetRange myRange
.Header = 1
.MatchCase = False
.Orientation = 1
.SortMethod = 1
.Apply
End With
End With
With myWorkbook
.Save
.Close
End With
appExcel.Quit
Set myWorkSheet = Nothing
Set myWorkbook = Nothing
Set appExcel = Nothing
End Sub
1) 2)将
myRange=Range(Selection)
更改为Set myRange=Selection
,并将.SetRange Range(myRange)
更改为.SetRange myRange
。还有一件事-使用xlDown
和xlToRight
不可靠。读这个答案