2016-08-02 4 views
0

Des Versuch, Spalten zu entfernen und einen einfachen Export sortieren und ich erhalte eine Fehlermeldung:Ärger mit grundlegenden Makro - Entfernen und Sortieren von Spalten

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

jedesmal, wenn ich die grundlegende Makro ausführen auf einem zweiten kürzlich erstellte Arbeitsmappe.

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 

Die ursprüngliche Arbeitsmappe 6 Spalten hatte, alles, was ich die Makro aufzeichnen tat, war 3 der zusätzlichen Spalten entfernen, Auto jede Spalte (Doppelklick, so dass jedes Bit an Information visuell paßt unten) passen, und dann versuchen, Sortieren der Arbeitsmappe nach der letzten Spalte (vom kleinsten zum größten)

Beim Ausführen des Makros auf einer neuen Arbeitsmappe wird eine Fehlermeldung generiert, und die Sortierung wird nicht in der letzten Spalte ausgeführt. Das Entfernen der zusätzlichen Spalten und Abstände scheint jedoch einwandfrei zu funktionieren.

+0

weil Sie in Ihrer neuen Arbeitsmappe kein Blatt namens 'QueueDetail_20160802_150124' haben – cyboashu

+0

Willkommen bei StackOverflow, Aquilam. Hier sind ein paar Hinweise, die Ihnen den Einstieg erleichtern: (1) [Versuchen Sie, die Verwendung von select zu vermeiden] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba -macros) (2) [qualifiziere deinen Code vollständig] (http://stackoverflow.com/documentation/excel-vba/1576/common-mistakes/5110/qualifying-references#t=201608022225226090252) und schreibe 'ThisWorkbook.WorkSheets ("QueueDetail_20160802_150124"). Spalten ("A: A"). EntireColumn.AutoFit' anstatt nur 'Spalten (" A: A "). EntireColumn.AutoFit'. (3) Zellen werden ausgewählt und Blätter werden aktiviert (nicht ausgewählt). – Ralph

+0

Cyboashu, wie kann ich den Code ändern, um in der geöffneten Arbeitsmappe ausgeführt zu werden, in der ich mich gerade befinde? – Aquilam

Antwort

0

Fügen Sie das Blatt "QueueDetail_20160802_150124" zu Ihrem neuen Buch hinzu, oder verwenden Sie ActiveWorkbook.sheets(1).Sort.SortFields.Clear Blätter (1) funktioniert auf dem ersten Blatt im aktiven Notizbuch; activesheet funktioniert auf dem aktuell ausgewählten Blatt.

Wenn Sie Debuggen verwenden, können Sie sehen, dass dies die Zeile ist, in der Ihr Code fehlschlägt.

+0

Gibt es eine Möglichkeit, den Code zu schreiben, um eine Spalte mit einer bestimmten Schlüsselwortüberschrift (durch ein bestimmtes Wort in Spalte A1, B1 usw.) zu markieren, und dann diese Spalten zu löschen? Und gibt es eine Möglichkeit, es dauerhaft zu Excel zu speichern, ohne dass die ursprüngliche Arbeitsmappe damit verbunden ist? Ich erzeuge einen Bericht, entferne die überschüssigen Informationen und drucke dann eine Hardcopy aus. Das generierte Berichtsdokument wird kurz nach dem Ausdruck einer Hardcopy gelöscht. @ Ralph – Aquilam

+0

@ Aquilam- Ich bin mir nicht sicher, was Sie mit "speichern Sie es dauerhaft zu übertreffen". Sie können das Dokument als PDF speichern, wenn dies Ihren Anforderungen entspricht. Was die Suche nach einem bestimmten Wort betrifft, schauen Sie sich die Schleife in VBA an (Sie sollten in der Lage sein, jede Spalte oder jedes Blatt zu durchlaufen und A1, B1 usw. zu betrachten. Wenn der cell.value dem Text entspricht, der Sie sind Suchen nach, können Sie Spalten (2) verwenden. Wählen Sie oder .entirecolumn.select, um es auszuwählen. Es ist definitiv möglich zu tun, was Sie wollen, aber diese Website ist kein Code für Sie. Versuchen Sie ein Beispiel, und eine andere Frage stellen, wenn du nicht weiterkommst. Viel Glück! :-) – ale10ander

Verwandte Themen