Makro in einer Arbeitsmappe nicht ausführen

Servus

Ich habe eine Excel-Datei mit mehreren Arbeitsblättern.
Hierfür habe ich ein Makro erstellt, das in jedem Arbeitsblatt, in einem bestimmten Bereicht, eine automatische Sortierung vornimmt (nach Datum), wenn man die Datei öffnet.

Meine Frage:
Das 1. Tabellenblatt der Datei soll von dem Makro ausgeschlossen sein. Es soll hier nichts sortiert werden.
Wie kann man sein Makro umschreiben bzw. wo muss man was bei den Einstellungen ändern, damit im Tabellenblatt 1 nichts passiert?

Das Makro sieht so aus:

Sub auto_open()

’ Sortieren Makro
’ Makro am 18.10.2011 von ms aufgezeichnet

’ Tastenkombination: Strg+s

Range(„A8:J271“).Select
Selection.Sort Key1:=Range(„B8“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(„B9“).Select
End Sub

Danke für eure Mühen…

Gruß
Michael

Hallo Michael,

so wie das aussieht, wird dieses Makro NUR im aktiven Tabellenblatt ausgeführt.

Aber egal, das erste Tabellenblatt schließt du aus, wenn du am Anfang der Routine folgendes reinschreibst:

if activesheet.name=„Tabelle1“ then exit sub

Gruß
Natator

Grüezi Michael

Ich habe eine Excel-Datei mit mehreren Arbeitsblättern.
Hierfür habe ich ein Makro erstellt, das in jedem
Arbeitsblatt, in einem bestimmten Bereicht, eine automatische
Sortierung vornimmt (nach Datum), wenn man die Datei öffnet.

So wie der Code im Moment eingebaut ist, wird immer das Tabellenblatt das momentan aktiv ist beim öffnen sortiert.

Es kommt also darauf an, welches das aktive Tabellenblatt beim letzten Speichern war.

In deinem Falle müsstest Du wohl die einzelnen Blätter durchlaufen und sortieren lassen - dann kannst Du das erste aussen vor lassen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Danke für die schnelle Antwort. Funktioniert einwandfrei.
Jetzt hat sich aber gleich eine neue Frage aufgetan, wie kann ich dass Makro jetzt noch einstellen, dass alle Arbeitsblätter beim öffnen sortiert werden?

Hallo Michael,

dann ersetze mal dein gesamtes Makro durch das nachfolgende:

Sub auto_open()
For i = 1 To Worksheets.Count
Worksheets(i).Select
If ActiveSheet.Name „Tabelle1“ Then
Range(„A8:J271“).Select
Selection.Sort Key1:=Range(„B8“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(„B9“).Select
End If
Next i
End Sub

Gruß
Natator

1 Like

Perfekt!!!

Großes Dankeschön aus Bayern!!!

Gruß
Michael

Sub workbook_open()

’ Sortieren Makro
’ Makro am 18.10.2011 von ms aufgezeichnet

’ Tastenkombination: Strg+s

For Each tabelle In Worksheets
If tabelle.Name „Tabelle1“ Then
Range(„A8:J271“).Select
Selection.Sort Key1:=Range(„B8“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(„B9“).Select
End If
Next tabelle
End Sub

viel erfolg und herzliche grüße

Hallo,

versuche es mal so:

Sub auto_open()

’ Sortieren Makro
’ Makro am 18.10.2011 von ms aufgezeichnet

’ Tastenkombination: Strg+s

If ActiveSheet.Name = „Tabelle1“ Then
Exit Sub
End If

Range(„A1:J271“).Select
Selection.Sort Key1:=Range(„B8“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(„B9“).Select
End Sub

Gruß,
Ptonka

Hallo Miche111,
du sortierst nach Spalte-B8 in jedem Arbeitsblatt, ja?
Wenn dem so ist, erstelle ein Modul und schreibe dein Script dort in eine Subroutine „Sort“.
Für deine Tabellenblätter 2 bis xxx erstelle auf deinem Tabellenblatt-1 einen Button und benenne ihn z.B.Sortiere.
Danach einen Doppelklick drauf und folgenden Code eingeben:

Private Sub CommandButton1_Click()
Sheets(„Tabelle2“).Activate: Sort
Sheets(„Tabelle3“).Activate: Sort
’ usw.
End Sub

Vielleicht wäre das ein Ansatz…

mfg Softoldi

Hallo Miche111,

hier mein Lösungsvorschlag (ich habe Ihr Macro etwas verändern müssen):

Sub auto_open()
Dim arbeitsb As Integer
Dim i As Integer
'Anzahl Arbeitsblätter ermitteln
arbeitsb = Worksheets.Count
'Schleife starten um alle Arbeitsblätter ab dem 2. zu bearbeiten
For i = 2 To arbeitsb
'With verwenden um Programm übersichtlicher zu machen
With ActiveWorkbook.Worksheets(i)
'mit Arbeitsblatt 2 Sortierung beginnen
Worksheets(i).Activate
’ Ihr ursprüngliches Programm mit kleinen Änderungen
.Range(„A8:J17“).Select
Selection.Sort Key1:=.Range(„B8“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
.Range(„B9“).Select
'Withanweisung aufheben
End With
'auf zum nächsten Arbeitsblatt
Next i
End Sub

Gruß Hugo

kann derzeit nicht helfen

Hallo,

Falls noch keine Antwort bekommen hast.

Den code in eine If abfrage ein bauen.
z.b.

Sub auto_open()

’ Sortieren Makro
’ Makro am 18.10.2011 von ms aufgezeichnet

’ Tastenkombination: Strg+s

if …

dein code

end if
End Sub

Gruß
Fred

Das 1. Tabellenblatt der Datei soll von dem Makro
ausgeschlossen sein. Es soll hier nichts sortiert werden.
Wie kann man sein Makro umschreiben bzw. wo muss man was bei
den Einstellungen ändern, damit im Tabellenblatt 1 nichts
passiert?

Das Makro sieht so aus:

Sub auto_open()

’ Sortieren Makro
’ Makro am 18.10.2011 von ms aufgezeichnet

’ Tastenkombination: Strg+s

Range(„A8:J271“).Select
Selection.Sort Key1:=Range(„B8“), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range(„B9“).Select
End Sub

Danke für eure Mühen…

Hallo Michael,

das Makro, so wie du es in der Frage angegeben hast sortiert nur im Blatt, dass beim Öffnen aktiv ist, nicht in allen blättern.

Mit den nachfolgenden Anpassungen/Ergänzungen wird in allen Blättern außer dem 1. sortiert. Auf die Select-Anweisungen wird dabei verzichtet.

Gruß
Franz

Sub auto\_open()
 '
 ' Sortieren Makro
 ' Makro am 18.10.2011 von ms aufgezeichnet
 '
 ' Tastenkombination: Strg+s
 '
 Dim objWks As Worksheet
 For Each objWks In ThisWorkbook.Worksheets
 With objWks
 Select Case .Index
 Case 1 '
 'nicht sortieren
 Case Else
 .Range("A8:J271").Sort Key1:=.Range("B8"), Order1:=xlAscending, Header:=xlGuess, \_
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, \_
 DataOption1:=xlSortNormal
 End Select
 End With
 Next objWks
End Sub