質問

私は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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top