2016-08-02 13 views
0

列を削除し、簡単な輸出をソートするためにしようと、私はエラーを取得しています:トラブル - 列の削除や並べ替え

Run-time error '9': Subscript out of range

私は2番目最近作成したブック上の基本的なマクロを実行するたびに。

Sub ONCE() 
' 
' ONCE Macro 
' export and prep an ONC list 
' 
' Keyboard Shortcut: Ctrl+e 
' 
    Range("A:A,B:B,F:F").Select 
    Range("F1").Activate 
    Selection.Delete Shift:=xlToLeft 
    Columns("A:A").Select 
    Columns("A:A").EntireColumn.AutoFit 
    Columns("B:B").ColumnWidth = 8.29 
    Columns("B:B").EntireColumn.AutoFit 
    Columns("C:C").EntireColumn.AutoFit 
    Columns("C:C").Select 
    ActiveWorkbook.Worksheets("QueueDetail_20160802_150124").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("QueueDetail_20160802_150124").Sort.SortFields.Add _ 
     Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ 
     :=xlSortNormal 
    With ActiveWorkbook.Worksheets("QueueDetail_20160802_150124").Sort 
     .SetRange Range("A2:C35") 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Range("D4").Select 
End Sub 

オリジナルのワークブックは6列を持っていた、私はマクロを記録するためにやったすべては、(情報の各ビットは、視覚的にフィット怒鳴るように、ダブルクリック)自動各列に合わせ、余分な列の3を削除してみてくださいました最後の列でブックをソートします(最小から最大)。

新しいブックでマクロを実行すると、エラーメッセージが生成され、最後の列で並べ替えが実行されません。余分な列とスペースを削除することは完璧に機能しているようです。

+0

新しいブックには、「QueueDetail_20160802_150124」というシートがありません – cyboashu

+0

StackOverflowへようこそ、Aquilam。ここにあなたが始めるためのいくつかの指針があります:(1)[selectの使用を避けようとする](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba -macros)(2)[コードを完全に修飾する](http://stackoverflow.com/documentation/excel-vba/1576/common-mistakes/5110/qualifying-references#t=201608022225226090252)、 'ThisWorkbook.WorkSheets ( "A:A")EntireColumn.AutoFit'の代わりに、列( "A:A")、EntireColumn.AutoFit'の代わりに、 "QueueDetail_20160802_150124" (3)細胞が選択され、シートが活性化される(選択されない)。 – Ralph

+0

cyboashu、現在開いているワークブックの中で実行するコードを変更するにはどうすればよいですか? – Aquilam

答えて

0

はあなたの新しいブックにシート「QueueDetail_20160802_150124」を追加、またはその他(1)アクティブノートブックの最初のシート上で動作しますActiveWorkbook.sheets(1).Sort.SortFields.Clear シートを使用。 activesheetは、現在選択されているシート上で動作します。

デバッグを使用すると、これがコードが失敗する行であることがわかります。

+0

特定のキーワード見出し(列A1、B1などの特定の単語)を持つ列を強調表示し、それらの列を削除するコードを記述する方法はありますか? そして、元のワークブックを関連付けることなくExcelに永久保存する方法はありますか? レポートを生成して余分な情報を削除し、ハードコピーを印刷しています。生成されたレポート文書は、ハードコピーが印刷された直後に削除されます。 @ralph – Aquilam

+0

@ Aquilam-私はあなたが「恒久的にそれを保存して秀でる」という意味がわからない。あなたの要件を満たすならば、PDFとして文書を保存することができます。 特定の単語を探すのであれば、VBAのルーピングを調べてください(各列、または各シートをループして各A1、B1などを見ることができるはずです)。cell.valueが あなたが望むことは間違いなく可能ですが、このサイトは「あなたのためのコード」の場所ではありません。例を試してみてください。あなたが立ち往生したときに別の質問をしてください。幸運を!:-) – ale10ander