2012-03-30 11 views
0

別のファイルを開くExcelファイルからVBAスクリプトを実行して、データやグラフを操作して保存します。データをソートしようとする場合を除いてすべてが完全に機能します。私はライン.SortFields.Add Key:=Range("J3:J11")...されたら、私はそれが私がExcelオブジェクトを参照してるの方法とは何かを持っていると確信しているが、私はすべてを試みたし、ように見えることはできませんエラーExcel 2007:VBAを使用してデータをソートする際の「オートメーションエラー」(80010105)

Run-time error '-2147417851 (80010105)': 
    Automation error 
    The server threw an exception 

を取得します解答を見つける。ソートコードはマクロレコーダーから借用され、変更されました。

Private Sub button1_Click() 
Dim path As String 
Dim exl As Excel.Application 
path = ActiveWorkbook.path & "\" 
Set exl = CreateObject("Excel.Application") 

With exl 
    .Workbooks.Open path & "bin\Integrated UPSIDE with Summary.xlsm" 

    <...other code...> 

    With .Worksheets("Summary").Sort 
     .SortFields.Clear 
     .SortFields.Add Key:=Range("J3:J11") _ 
      , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
     .SetRange Range("C2:P11") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

    <...other code...> 

.Workbooks.Close 
End With 
exl.QUIT 
End Sub 

ご迷惑をおかけして申し訳ありません。ありがとう

+0

'Range(" J3:J11 ")'を '.Range(" J3:J11 ")に変更してもう一度やり直してください。 'Range(" C2:P11 ")' :)同様に –

答えて

0

あなたの範囲を正しく参照していないという問題があります。使用しているソートコードは、現在のExcelインスタンスのアクティブなワークシートの範囲をソートするために作成されています。

これを修正する最も簡単な方法は、範囲をExcelの他のインスタンスにあるものとして参照することです。

.SortFields.Add Key:=exl.Worksheets("Summary").Range("J3:J11") _ 
       , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
.SetRange exl.Worksheets("Summary").Range("C2:P11") 

ただし、代わりにブックとワークシートオブジェクトを使用することをお勧めします。

Private Sub button1_Click() 
    Dim path As String 
    Dim exl As Excel.Application 
    Dim wbk As Workbook, sht As Worksheet 
    path = ActiveWorkbook.path & "\" 
    Set exl = CreateObject("Excel.Application") 

    With exl 
     Set wbk = .Workbooks.Open(path & "bin\Integrated UPSIDE with Summary.xlsm") 

     '<...other code...> 

     Set sht = wbk.Worksheets("Summary") 
     With sht.Sort 
      .SortFields.Clear 
      .SortFields.Add Key:=sht.Range("J3:J11") _ 
       , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
      .SetRange sht.Range("C2:P11") 
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 

     '<...other code...> 

     wbk.Close 
     Set sht = Nothing 
     Set wbk = Nothing 
    End With 
    exl.Quit 
End Sub 
関連する問題