Microsoft Excel

Herbers Excel/VBA-Archiv

automatisches sortieren mit Makro | Herbers Excel-Forum


Betrifft: automatisches sortieren mit Makro von: stutze
Geschrieben am: 04.02.2010 22:51:03

Hallo,
ich weiß, dass diese Thema schon dutzende Male hier behandelt wurde. Habe mich auch schon versucht rein zu lesen, aber jeder hat irgendwie andere Sortierungen.
Habe folgendes Makro (über Aufzeichnung in meinem VBAProjekt im Modul1):

Sub MakroTag1()
'
' MakroTag1 Makro
' automatisches sortieren, wenn g3<>"?"

Private Sub WorkSheet_Change()
If ("G3") <> "?" Then
    Range("B5:D30").Select
    ActiveWorkbook.Worksheets("Tag 1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tag 1").Sort.SortFields.Add Key:=Range("D6:D30"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Tag 1").Sort.SortFields.Add Key:=Range("C6:C30"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tag 1").Sort
        .SetRange Range("B5:D30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select
End If
End Sub
Die Zeilen Private Sub... und If ("G3")... habe ich selber reingeschrieben. Wenn ich Schritt für Schritt durchgehe, dann funktioniert es auch, jedoch nicht, wenn ich in die Tabelle wechsel. Muss das Makro in "DieseArbeitsmappe" oder in den Sheet, wo das Makro ausgeführt werden soll? Das Makro soll "automatisch" einen Bereich sortieren, wenn in der Zelle G3 was anderes als das Fragezeichen steht. Am besten, sofort, wenn das Fragezeichen "ersetzt" wird. Ersetzung erfolgt duch eine Eingabe in einem anderen Tabellenblatt.
Für Hilfe bedanke ich mich im Voraus.

stutze

  

Betrifft: AW: automatisches sortieren mit Makro von: Josef Ehrensberger
Geschrieben am: 04.02.2010 23:01:22

Hallo ?


das gehört in das Modul der Tabelle in der du G3 änderst!



Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$G$3" Then
    If Target <> "?" Then
      With Worksheets("Tag 1")
        .Range("B5:D30").Sort.SortFields.Clear
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("D6:D30"), _
          SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("C6:C30"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange .Range("B5:D30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End If
  End If
End Sub


Gruß Sepp



  

Betrifft: AW: automatisches sortieren mit Makro von: stutze
Geschrieben am: 04.02.2010 23:22:28

Hi Sepp. Danke für den Code. Ist trotzdem etwas zu hoch für mich.
Die Sortierung soll in Tabelle 8 geschehen.
Den Wert, der dann in der Zelle G3 steht und damit das Fragezeichen ersetzt, mache ich in Tabelle 2.
Habe jetzt deinen Code im 'Modul1', in 'Tabelle8' und in 'Tabelle2' versucht - aber nichts klappt.

stutze


  

Betrifft: AW: automatisches sortieren mit Makro von: Josef Ehrensberger
Geschrieben am: 04.02.2010 23:29:04

Hallo ???


der Code ghört in das Modul der Tabelle2, ändere $G$3in die Zelladresse in der du änderung vornimmst,
und ändere "Tag 1" in "Tabelle 8" wenn dort die Sortierung stattfinden soll.



Gruß Sepp



  

Betrifft: AW: automatisches sortieren mit Makro von: stutze
Geschrieben am: 04.02.2010 23:50:08

Kann es sein, dass ich zu blöd dafür bin, um dich zu verstehen?
Was ist das Modul der Tabelle2?
Nochmal und detaillierter.
Ich gebe in Tabelle2, in der Zelle I12 einen Wert ein (zum Beispiel die Zahl 1), der dann auf Tabelle8, in der Zelle G3, das Fragezeichen "ersetzt.

stutze


  

Betrifft: AW: automatisches sortieren mit Makro von: Josef Ehrensberger
Geschrieben am: 05.02.2010 00:04:15

Hallo ?


mach einen Rechtsklick auf das Blattregister von Tabelle2 und wähle im Kontextmenü "Code anzeigen", in das rechte Fenster kopiertst du dan folgenden Code.



' **********************************************************************
' Modul: Tabelle2 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$I$12" Then
    With Worksheets("Tabelle8")
      If .Range("G3") <> "?" Then
        .Range("B5:D30").Sort.SortFields.Clear
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("D6:D30"), _
          SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("C6:C30"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange .Range("B5:D30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End If
    End With
  End If
End Sub


Gruß Sepp



  

Betrifft: AW: automatisches sortieren mit Makro von: stutze
Geschrieben am: 05.02.2010 09:05:24

Absolut nichts zu machen. Keine Sortierung, wenn ich in die Tabelle wechsel.

Wechsel mit einem einfachen Code in die Tabelle:

Private Sub ComboBox1_Change()
Select Case ComboBox1
Case "Punktestand Mitspieler"
    ComboBox1 = ""
    Range("A1").Activate
    Sheets("Punktestand").Select
    ActiveSheet.ComboBox2 = ""
    ActiveSheet.Range("A1").Activate
Case "Spielregeln"
    ComboBox1 = ""
    Range("A1").Activate
    Sheets("Spielregeln").Select
    ActiveSheet.ComboBox1 = ""
    ActiveSheet.Range("A1").Activate
Case "Tabelle Gruppenspiele"
    ComboBox1 = ""
    Range("A1").Activate
    Sheets("Tabelle").Select
    ActiveSheet.ComboBox1 = ""
    ActiveSheet.Range("A1").Activate
Case "Finalspiele"
    ComboBox1 = ""
    ComboBox2 = ""
    Range("A1").Activate
    Sheets("Finalspiele").Select
    ActiveSheet.ComboBox1 = ""
    ActiveSheet.Range("A1").Activate
End Select
End Sub

Un wenn ich deinen Code darunter schreibe, dann gibt es einen Kompilierungsfehler im Modul der Tabelle2. Also hatte deinen Code nach oben geschoben. Fehler kommt nicht mehr, aber die Sortierung funktioniert trotzdem nicht.



stutze


  

Betrifft: AW: automatisches sortieren mit Makro von: Josef Ehrensberger
Geschrieben am: 05.02.2010 09:25:10

Hallo ???,


kannst du die Datei hochladen?



Gruß Sepp



  

Betrifft: AW: automatisches sortieren mit Makro von: stutze
Geschrieben am: 05.02.2010 09:34:56

Geht leider nicht, da die Datei ca. 600kB groß ist. Geht per Mail?


  

Betrifft: hi stutze, ich stutze... von: Renee
Geschrieben am: 05.02.2010 09:36:20

bei diesem Satz:

Absolut nichts zu machen. Keine Sortierung, wenn ich in die Tabelle wechsel. 

Das Ereignis wird nicht ausgelöst, wenn du in die Tabelle wechselst, sondern nur dann, wenn du in der Tabelle in der dieser Code steht in der Zelle I12 eine Änderung vornimmst!

GreetZ Renée


  

Betrifft: AW: hi stutze, ich stutze... von: stutze
Geschrieben am: 05.02.2010 09:42:24

Hi Renee. Schönes Wortspiel in deinem Betreff :-)
Wenn das so wäre, wie du schreibst, und ich in die Tabelle wechsel, dann müsste doch die Sortierung noch bestehen oder wird die Sortierung wieder rückgängig gemacht?

stutze


  

Betrifft: Nochmal von vorn und gaanz langsam... von: Renee
Geschrieben am: 05.02.2010 09:58:18

Stutze,

Diese Codes, die ich bis jetzt in diesem Thread sehe, machen sicher keine Sortierung rückgängig.
Ein Sortierung rückgängig zu machen ist ungefähr das Gleiche wie zu behaupten die Zahl 5 sei mit Sicherheit aus 2 und 3 enstanden ;-)

Also:
1. Bring Ordnung in die Aussagen, wie deine Tabellenblätter heissen. Also sag uns die Bezeichnung, wie sie in den Tabellenreitern stehen.
2. In welchem Blatt (Name!) ist I12, das die Sortierung auslösen soll.
3. In welchem Blatt (Name!) und welcher Zelle (Referenz) wird 'EingabeBlattName?'!I12 per Formel referenziert ?
4. Wie wird I12 verändert ? Von Hand ? Per Code (wenn ja: wie sieht der ganze Code aus?)
5. Welcher Datenbereich in welchem Blatt (Name!) soll sortiert werden ?
6. Soll bei Änderung von 'EingabeBlattName?'!I12 sortiert werden, oder erst wenn du in das 'SortierteBlattName?' wechselst ?

GreetZ Renée


  

Betrifft: AW: Nochmal von vorn und gaanz langsam... von: stutze
Geschrieben am: 05.02.2010 10:10:29

Okay, dann Punkt für Punkt. Ich weiß, dass über Ferndiagnose mit einem Unwissenden es sehr schwer sein kann.
2. I12 steht in "Tipabgabe"
3. ?? - denke mir aber das bezieht sich auf Punkt 2
4. wird per Hand geändert
5. der Datenbereich B6:D30 in "Tag 1" ((erst nach Spalte D (Überschrift: "Punkte") absteigend, dann nach Spalte C (ohne Übeschrift) aufsteigend)
6. bei Änderung


  

Betrifft: Matchentscheidende Frage... von: Renee
Geschrieben am: 05.02.2010 10:42:43

Hi,

Ich bin immer noch stutzig ;-), denn ich seh in deinem ComboBox-Code kein Blatt mit Namen "Tag 1" ??
...und die wichtigste Frage: Welches Blatt (Name!) war aktiviert, als du den Code aufgezeichnet hast ?

GreetZ Renée


  

Betrifft: AW: Matchentscheidende Frage... von: stutze
Geschrieben am: 05.02.2010 10:56:17

Ahhhh. sorry. Bitte den ComboBox-Code vergessen. Der hat nichts direkt mit "Tag 1" zu tun. Komme nur über "Umwege" auf "Tag 1".
Und aktiviert war "Tag 1", weil ich darüber auch den Code aufgezeichnet habe (Entwicklertools - Makro aufzeichnen).

stutze


  

Betrifft: AW: Matchentscheidende Frage... von: Renee
Geschrieben am: 05.02.2010 11:05:27

Hi stutze,

Dann gehört der erste Code von Sepp, mit einer kleinen Änderung (s.unten) in das Tabelleblatt "Tipabgabe" (Rechtsklick auf Tabellenreiter - Code anzeigen - Code einfügen/ersetzen). Ev. Code in "Tag 1" muss gelöscht werden!

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$I$3" Then
    If Target <> "?" Then
      With Worksheets("Tag 1")
        .Range("B5:D30").Sort.SortFields.Clear
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("D6:D30"), _
          SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("C6:C30"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange .Range("B5:D30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End If
  End If
End Sub

*) Die Abhängigkeit 'Tag 1'!G3 von Tipabgabe!I3 habe ich noch nicht begriffen, aber einfach mal angenommen das dort =Tipabgabe!I3 steht.

GreetZ Renée


  

Betrifft: AW: Matchentscheidende Frage... von: stutze
Geschrieben am: 05.02.2010 11:40:31

Mit $I$3 meinst du doch sicherlich $G$3, oder? Trotz der Änderung sortiert sich nichts.
Zu deiner Anmerkung. In G3 auf Tag 1 steht folgende Formel:

=WENN(Tipabgabe!I12="";"?";Tipabgabe!I12)

Würde es dir was ausmachen dir die Datei per Mail zu senden? Ich denke mal, dass du dann genau siehst, was ich meine und möchte.

stutze


  

Betrifft: AW: Matchentscheidende Frage... von: Renee
Geschrieben am: 05.02.2010 12:18:42

Hi,

NEIN im Code MUSS es "$I$3" heissen!
Und diese Zeile:

If Target <> "?" Then

durch diese ersetzen!
If Target <> "" Then
GreetZ Renée


  

Betrifft: AW: Matchentscheidende Frage... von: stutze
Geschrieben am: 05.02.2010 12:30:21

Nix zu machen. Code mit deinen Änderungen:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$I$3" Then
    If Target <> "" Then
      With Worksheets("Tag 1")
        .Range("B5:D30").Sort.SortFields.Clear
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("D6:D30"), _
          SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Range("B5:D30").Sort.SortFields.Add Key:=.Range("C6:C30"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange .Range("B5:D30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End If
  End If
End Sub
Mail an dich nicht doch von nutzen?

stutze


  

Betrifft: Sorry keine Mail, aber Mustermappe von: Renee
Geschrieben am: 05.02.2010 13:00:34

Hi,

Kopier deine Mappe in eine neue.
Aus der Kopie alles rauswerfen, was nicht relevan für den Code ist.
Also nur 2 Blätter (Tipeingabe, Tag 1), keine UF!!!
Diese Beispielmappe hochladen.

GreetZ Renée


  

Betrifft: @Renée OT mit dem macht's Spaß, gell! ;-)) von: Josef Ehrensberger
Geschrieben am: 05.02.2010 13:02:39

Gruß Sepp



  

Betrifft: buaaahh, und wie ;-(( (OT) von: Renee
Geschrieben am: 05.02.2010 13:12:25




  

Betrifft: Mustermappe von: stutze
Geschrieben am: 05.02.2010 13:20:04

https://www.herber.de/bbs/user/67784.xlsm


  

Betrifft: kann die Mustermappe nicht öffnen... von: Renee
Geschrieben am: 05.02.2010 13:42:50

bitte als Excel 97-2003 Arbeitsmappe abspeichern und hochladen.

GreetZ Renée


  

Betrifft: AW: kann die Mustermappe nicht öffnen... von: stutze
Geschrieben am: 05.02.2010 14:42:31

Hoffe es klappt jetzt. Und bitte nicht an mich verzweifeln. Weiß, es ist schwierig mit mir.
Jetzt steht zwar kaum noch was drin, weil ich diese extrem "verkleinern musste, aber ich hoffe du kannst was damit anfangen.
https://www.herber.de/bbs/user/67787.xls

stutze


  

Betrifft: AW: kann die Mustermappe nicht öffnen... von: Renee
Geschrieben am: 05.02.2010 17:47:35

Hi stutze,

Tut mir leid, mit der Mappe kann ich nix anfangen.
Ich bin zwar aus dem besagten Kontinent, aber mit Fussball hab ich nun gar nix am Hütchen.
Vielleicht nimmst du bessere diese Vorlage und passt sie ggf. noch deinen Bedürfnissen an.

GreetZ Renée


  

Betrifft: AW: kann die Mustermappe nicht öffnen... von: stutze
Geschrieben am: 05.02.2010 19:51:27

Was soll dass denn jetzt? Es geht hier nicht um Fußball und dass man sich damit nicht auskennt, ich im übrigen auch nicht, es geht um ein VBA-Code der einen Datenbereich automatisch sortieren soll, wenn eine bestimmte Eingabe gemacht wird.

Werd ich dann wohl doch wieder von Hand sortieren müssen..
Schönen Dank und tolles WE


Beiträge aus den Excel-Beispielen zum Thema "automatisches sortieren mit Makro"