Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellensortierung bei Neuberechnung

Tabellensortierung bei Neuberechnung
16.10.2007 08:16:00
Martin
Halli,
Ich habe das folgende Problem:
Der Tabellenbereich A2:J26 dient der Erstellung eines Pareto-Diagramms (Balken) und muß daher nach Spalte B abfallend sortiert sein. Da sich die Daten des Bereiches aus anderen Blättern unterschiedlich zusammenstellen und je nach Eingaben ändern, hätte ich gerne eine automatische Sortierung des Bereiches A2:J26 nach Spalte B abfallend bei jeder Neuberechnung.
Geht das?
Danke Euch schon mal.
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellensortierung bei Neuberechnung
16.10.2007 10:13:03
duke7
In der Hilfe steht, daß es ein Ereignis Workbook_SheetCalculate gibt.
Das Makro würde dann so aussehen:

Private Sub Workbook_SheetCalculate(ByVal sh As Object)
With worksheets(1)
.Range("a2:j26").Sort Key1:=.Range("b1"), order1:=xlDescending
End With
End Sub


Allerdings wird das Makro bei mir nicht ausgeführt wenn neu berechnet wird.
Vielleicht hilft dir das workbook_sheetchange ereignis. Das funktioniert bei mir
Grüße Alex

AW: Tabellensortierung bei Neuberechnung
16.10.2007 10:53:40
Martin
Hm.... ich bin nicht so der VBA-Profi. Muss ich das in "DieseArbeitsmappe" eingeben? Und ist "(ByVal sh As Object)" unabhänig von meinem Workbook-Namen und Tabellennamen?
(Mein Workbook heißt "Mappe5" und das Sheet haißt "Tabelle1".
Bei mir passiert auch nnichts....
Kannst du mir noch weiterhelfen?
Martin

Anzeige
AW: Tabellensortierung bei Neuberechnung
16.10.2007 12:25:14
duke7
Also, das Makro gehört in DieseArbeitsmappe, das ist richtig.
das "(ByVal sh As Object)" ist eigentlich für dich nicht relevant. Das ist soviel ich noch weiß der Rückgabewert, d.h. dadurch bekommst du raus, welches Tabellenblatt geändert wurde.
Aber wie gesagt, bei mir funktioniert das ganze auch nicht, weil das Makro schon gar nicht aufgerufen wird, also Excel scheinbar nicht erkennt, das neu berechnet wurde.
Wenn du das ganze aber unter dem Name workbook_sheetchange speicherst, wird die Tabelle jedesmal sortiert, wenn du Änderungen vornimmst. Ist aber vielleicht auch nicht genau das, was du wolltest.

Anzeige
AW: Tabellensortierung bei Neuberechnung
17.10.2007 08:32:00
Martin
Hallo noch einmal. Doch ich glaube das ist was ich suche - nur es läuft bei mir nicht:
Hier mein Makro in "Diese Arbeitsmappe":

Private Sub Workbook_Sheetchange(ByVal sh As Object)
With Worksheets(Tabelle1)
.Range("a2:j26").Sort Key1:=.Range("b2"), order1:=xlDescending
End With
End Sub


Es kommt bei Änderung einer Zelle:
"Fehler beim Kompilieren: Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen"
Hast du eine Idee?
Martin

AW: Tabellensortierung bei Neuberechnung
17.10.2007 09:13:00
duke7
Das Makro muß
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
heißen.
Wenn du solche Ereigniss-Prozeduren erstellst, ist es am einfachsten im Editor oben in dem Listenfeld in dem normal "Allgemein" steht "Workbook" einzustellen, dann kannst du im rechten Listenfeld sehen, was es für Ereignis-Prozeduren gibt und die entsprechende aufrufen. Die Workbook_open Prozedur die automatisch erstellt wird, kannst du ja dann löschen.
Ich habe heute morgen auch nochmal das
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
ausprobiert. Funktioniert doch.
Der Unterschied zwischen beiden Ereignissen ist, daß bei Variante A das Makro immer aufgerufen wird, sobald die Tabelle verändert wird, also z.B. auch wenn Text in eine Zelle eingegeben wird. Bei Variante B wird das Makro nur aufgerufen, wenn Zellen geändert werden, auf die in anderen Zellen per Formel zugegriffen wird.
Gruß
Alex

Anzeige
AW: Tabellensortierung bei Neuberechnung
17.10.2007 10:27:00
Martin
Danke. In meiner Testdatei klappt das so. ABER:
In der eigentlichen Datei (8MB - nicht postingfähig) klappt es nur, wenn ich diese Routine nehme:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
With Worksheets(1)
Sh.Range("a2:j26").Sort Key1:=Sh.Range("B1"), order1:=xlDescending
End With
End Sub


Also mit Sh zwei mal in der dritten Zeile.
UND:
Da ich zwei ähnliche Blätter habe, die beide jeweils in ihrem Bereich "a2:j26" sortiert werden sollen ist mir nicht klar wo die Routine klar macht welches/welche Blätter gemeint sind?
Bitte hilfmir noch mal.
Danke. Martin

Anzeige
AW: Tabellensortierung bei Neuberechnung
17.10.2007 11:47:00
duke7
so ganz verstehe ich es nicht.
aber alles der Reihe nach.
dein Makro müsst auch ohne die with und end with laufen. Die with anweisung wird eigentlich nur
benutzt um Code zu sparen. das heißt statt
sub test()
Workbooks("mappe4").Worksheets("Tabelle1") .Cells(1, 1) = 10
Workbooks("mappe4").Worksheets("Tabelle1") .Name = "Test"
End Sub


zu schreiben, schreibt man
Sub test()
With Workbooks("mappe4").Worksheets("Tabelle1")
.Cells(1, 1) = 10
.Name = "Test"
End With
End Sub


Hoffe es ist klar, ansonsten mal in der Hilfe nachschauen.
In deinem Makro wird aber nach der With-Anweisung gar kein Bezug mehr auf worksheets(1) genommen (steht ja nirgends nen einzelner Punkt). Daher gehts also auch ohne.
Zu deiner eigentlichen Frage:
Das Makro läuft, wenn etwas in einem Blatt geändert wird. Es liefert aber zugleich auch zwei Rückgabewerte. Einmal sh (das Tabellenblatt indem die Änderung vorgenommen wurde) und target (der Bereich in dem die Änderung vorgenommen wurde).
wird vielleicht klar wenn du das mal laufen läßt


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox ("Name des geänderten Blattes: " & Sh.Name & chr(13) & "Tabellenbereich: " & Target. _
Address)
End Sub


In deinem Makro wird derzeit also immer das Blatt sortiert, indem eine Änderung vorgenommen wurde.
Wenn du egal wo geändert wird, immer die selben Blätter sortieren willst, müßte die Anweisung
zb so lauten:


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets("Tabelle1").Range("a2:j26").Sort Key1:=Worksheets("Tabelle1").Range("B1"), order1: _
=xlDescending
Worksheets("Tabelle2").Range("a2:j26").Sort Key1:=Worksheets("Tabelle2").Range("B1"), order1: _
=xlDescending
End Sub


Anzeige
AW: Tabellensortierung bei Neuberechnung
17.10.2007 13:53:10
Martin
Danke.
Du bist der Wizzard!!!
Es klappt.
Gruß
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige