質問
私はExcel VBAに新しいです。これは単純であるべきであるようです。 アクセスデータベースからスプレッドシートをソートする必要があります。
これは私のコードです。
現在1004エラーを受けます。"MyRange= Range(selection)"
に "オブジェクトの範囲_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
. 解決
VBAでは何も選択する必要はありません。それが記録されたマクロのことですが、効率的な方法ではありません。試してみてください: myrange= sheet1.range( "b1"、sheet1.range( "b1")。end(xldown).end(Xltoright))
あなたが見ている問題は、エラーが発生した行の「設定」の欠如であるかもしれません。「設定」なしでExcelが範囲内容を取り組むことは、「設定」が範囲オブジェクト自体で動作します。
他のヒント
会議とより良い練習を考慮しています私はあなたのコードをコメントで書き直しました:
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
. 所属していません StackOverflow