Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kann man ein Button zum sortieren einfügen?

Kann man ein Button zum sortieren einfügen?
04.09.2006 12:37:45
Thorsten
Hallo liebe Forumteilnehmer,
ich bins nochmal. Die Sache mit dem Sortieren hat super geklappt. Danke nochmal. Jetzt habe ich ein anderes Problem. Kann ich in die Excel Tabellen einen Button einfügen, dass ein Makro startet, welches mir die Daten sortiert? (Ich habe in der Arbeitsmappe zwei Tabellen) Falls das Funktioniert, muss ich dann in dem VBA-Editor auf beide Seiten, also Tabelle 1 und Tabelle 2 ein Makro einfügen, oder kann ich ein Knöpfchen einfügen und mein Makro nehmen, was in "DieseArbeitsmappe" steht? Kann ich das Knöpfchen dann auch in der Tabelle einfügen, wo ich mag? Ich füge den Code nochmal ein. Hier kommt er:

Private Sub Workbook_Open()
Dim WARTUNG As Object
Set WARTUNG = ActiveWorkbook.Sheets("Wartung")
Dim PRUEFUNG As Object
Set PRUEFUNG = ActiveWorkbook.Sheets("Prüfung")
If MsgBox("Sollen die Datensätze nun sortiert werden?", vbYesNo, "Sortieren") = vbNo Then Exit Sub
WARTUNG.Select
WARTUNG.Unprotect
Columns("E:E").Select
Range("A2:H365").Sort Key1:=Range("E3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C3").Select
WARTUNG.Protect
PRUEFUNG.Select
PRUEFUNG.Unprotect
Columns("E:E").Select
Range("A2:H365").Sort Key1:=Range("E3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C3").Select
PRUEFUNG.Protect
WARTUNG.Select
Range("C3").Select
End Sub

Für Eure Hilfe danke ich Euch im Voraus.
Gruß Thorsten

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kann man ein Button zum sortieren einfügen?
04.09.2006 13:30:15
Klaus M.vdT.
Hallo Thorsten,
schreib deinen Code nicht in die Workbook_Open, sondern als eigene SUB:

SUB MeinCode()
'Code
End Sub

Dann kannst du den Code von überall aufrufen, zb aus der Workbook_Open:


Private Sub Workbook_Open()
Call MeinCode
End Sub


Oder auch aus einem Button, den du aus der Steuerelement-Leiste ins Tabellenblatt ziehst.


Private Sub CommandButton1_Click()
Call MeinCode
End Sub


Ürigens, dein Code ist relativ unsauber mit den vielen Selects. Soll ich da mal drüber schauen, ob das auch eleganter geht?
Gruß,
Klaus M.vdT.
Anzeige
AW: Kann man ein Button zum sortieren einfügen?
04.09.2006 14:00:49
Thorsten
Hi Klaus,
danke für Deine rasche Antwort. Tschuldige, dass ich mich jetzt erst melde, aber ich habe eben gerade zum Mittag gegessen. Kann ich denn den Code als eigene Sub schreiben? Ich möchte nämlich, dass er schon sortiert, wenn ich die Arbeitsmappe aufrufe. Wie bekomme ich denn einen Button in das Arbeitsblatt. Du sagtest mit der Steuerelementliste. Wie rufe ich die denn auf? Ist vielleicht eine blöde Frage, aber ich bin in Excel nicht so firm. Was meinst Du denn mit "der Code ist unsauber"? Funktioniert der nicht richtig? Also so wie ich es bisher gesehen habe, macht der keine Fehler. Aber wenn Du da drüber schauen magst, sag ich natürlich nicht nein.
Noch eine andere Frage: Kann ich dieses Sortierbutton hintuen, wo ich will, oder muss das in einer bestimmmten Zelle der Tabelle sein? Kann ich das auch mit "Sortieren" beschriften? Vielen Dank für Deine Mühe.
Gruß Thorsten
Anzeige
AW: Kann man ein Button zum sortieren einfügen?
04.09.2006 14:32:08
Klaus M.vdT.
Hallo Thorsten,
step by step:
im VBA-Editor erstellst du ein neues Modul für deine Arbeitsmappe (oder nimmst ein existierendes) und kopierst da folgenden Code rein:

Sub MeinSortieren()
If MsgBox("Sollen die Datensätze nun sortiert werden?", vbYesNo, "Sortieren") = vbNo Then Exit Sub
With Sheets("Wartung")
.Unprotect
.Range("A2:H365").Sort Key1:=Range("E3"), Order1:=xlAscending
.Protect
End With
With Sheets("Prüfung")
.Unprotect
.Range("A2:H365").Sort Key1:=Range("E3"), Order1:=xlAscending
.Protect
End With
End Sub

Wenn du den Code aufmerksam liest, wirst du feststellen dass es fast dein Code ist - nur ein wenig entschlackt. Bei solch kurzen Codefetzen macht es kaum einen Unterschied, aber prinzipiell sollte in VBA so weit es nur geht auf "select" und "activate" verzichtet werden, das sind Performance-Bremsen.
Deine neue Sub "MeinSortieren" kannst du von überall aus aufrufen, mit dem Befehl "Call MeinSortieren". Damit diese Sub beim öffnen der Tabelle gleich ausgeführt wird, schreibst du im Editor in "Diese Arbeitsmappe":

Private Sub Workbook_Open()
Call MeinSortieren
End Sub

Jetzt wird bei jedem öffnen der Arbeitsmappe die Sub "Mein Sortieren" ausgeführt - hat den gleichen Effekt, wie den Code direkt in die Sub_WorkbookOpen zu schreiben ABER du kannst jetzt eben auch mit einem Button darauf zugreifen.
Um einen Button zu erstellen, clicke mit Rechts in deine Icon-Leiste (da wo die Seitenansicht, das Speichern-Symbol usw. ist). Wähle hier aus "Steuerelement Toolbox".
Das 6te Symbol von links sieht aus wie ein Mini-Button und ist es auch! Click einmal darauf, dann in dein Tabellenblatt und zieh einen Rahmen in der Größe und Position, wie du den Button haben möchtest (keine Angst, du kannst immer noch korrigieren).
Wenn du aufmerksam warst, siehst du dass das Symbol mit dem Geodreieck und Bleistift jetzt aktiv ist - das bedeutet, du bist im "Entwurfmodus".
Click mit rechts auf Button, dann auf Eigenschaften. In dem kleinen Menue kannst du die "Caption" des Buttons ändern: Das steht dann auf dem Button. Schreibe hier zB "Sortieren". Wo du schon dabei bist, ändere gleich den Namen des Buttons in etwas wiedererkennbares, zB "ButtonSortieren". Grund: gewöhn dir Namensgebung von Elementen an, sonst steigtst du bei größeren Projekten nicht mehr durch! Und deine Kinder heißen ja auch nicht Kind1, Kind2 und Kind3 ;-)
Ganz wichtig: Ändere auch die "GetFocusOnClick" Eigenschaft auf "False", sonst funktioniert das Makro später nicht.
Ein Doppelclick auf den Button führt dich nun zurück in den VBA Editor, wo der Button darauf wartet einen Code zugewiesen zu bekommen. Das sieht so aus:

Private Sub ButtonMeinsortieren_Click()
End Sub

Zwischen diese Zeilen schreibst du entweder deinen gesamten Code ab oder - du hast es bestimmt schon erraten - den Aufruf "Call MeinSortieren"!
Wechsel wieder in Excel, deaktiviere den Entwurfmodus (Das Geodreieck mit Bleistift). Jetzt click auf den Button und staune!
Wenn du den Button verschieben oder sonstwas willst, Entwurfmodus wieder an!
Und, hats geklappt?
Gruß,
Klaus M.vdT.
Anzeige
Vielen vielen Dank
04.09.2006 15:12:02
Thorsten
Hi Klaus,
danke danke. Hat ein wenig gedauert, da ich das ganze Zeug eingeben musste. Das Ding rennt wie sau. Hat alles prima geklappt. Ich musste allerdings von meinem Code das:
Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
und das Columns("E:E").select übernehmen, weil er ohne das meine Überschrift nicht erkennt und die mitsortiert. Oder hast Du da vielleicht auch noch einen Tipp, wie ich das ohne .select hinbekomme. Ich habe jetzt meine Buttons in die zweite Spalte der zweiten Zeile gepackt. Sieht klasse aus. Nochmal vielen Dank für Deine Hilfe.
Gruß Thorsten
Anzeige
AW: Vielen vielen Dank
04.09.2006 15:15:11
UweD
Hallo
meist reicht es aus, die Überschriften anders zu formatieren z.B. Fett oder/und kursiv.
dann wird Sie erkannt.
Gruß UweD
(Rückmeldung wäre schön)
AW: Vielen vielen Dank
04.09.2006 15:21:08
Thorsten
Hallo Uwe,
danke für die Meldung. Aber die Überschrift ist anders formatiert. Die ist fett. Soll ich mal in dem Code die Zeilen um einige Zahlen nach unten verschieben? Meinst Du das hilft?
Gruß Thorsten
AW: Vielen vielen Dank
04.09.2006 15:33:11
Klaus M.vdT.
Thosten,
Key1:=Range("E3") zieht meines Wissens das Sortierkriterium, versuch hier mal zu ändern.
Vielleicht lädst du deine Mappe mal hoch und ich pass dir den Code eben an? Das ist einfacher, als wenn ich jetzt deine gesamte Mappe rekonstruiere.
Auchja, für extra speed probier mal folgendes:

Sub MeinSortieren()
Application.Screenupdating = False
'Dein Code
Application.Screenupdating = True
End Sub

Das schaltet die Bildschirmaktualisierung aus und verhindert das "Flackern" des Bildschirms .. vergiss blos nie, das wieder einzuschalten :)
Gruß und danke für die Rückmeldung,
Klaus
Anzeige
Sortieren
04.09.2006 15:45:54
Thorsten
Hi Klaus,
ich versuchs mal mit dem Key:=Range(E3). Ich lade Dir aber auch gleich mal die Mappe hoch und erkläre auch nochmal worum es geht. Einen Augenblick noch. Aber schonmal danke im Voraus.
Gruß Thorsten
AW: Vielen vielen Dank
04.09.2006 16:03:07
Thorsten
Hi Klaus,
das funktioniert irgendwie nicht. Ich lade Dir das Ding mal hoch. Du findest es unter

Die Datei https://www.herber.de/bbs/user/36399.xls wurde aus Datenschutzgründen gelöscht

Wäre nett, wenn Du mal drüber schauen könntest. Es geht darum. Es müssen in verschiedenen Abständen Prüfungen und Wartungen vorgenommen werden. Und ich wollte einen Kalendar basteln, so dass man nicht immer tausende von Zetteln durchsuchen muss, was jetzt gewartet werden muss und was nicht. Nochmals vielen Dank für Deine Mühe.
Gruß Thorsten
Anzeige
AW: Vielen vielen Dank
05.09.2006 09:46:25
Klaus M.vdT.
https://www.herber.de/bbs/user/36412.xls
Hallo Thorsten,
oben die überarbeitete Datei. Kurt hatte mit https://www.herber.de/forum/messages/798534.html absolut recht, der Punkt vor dem Kriterium fehlte.
Kurz zur Erklärung, wenn ein Bezug innerhalb einer "with" Deklaration steht und mit einem Punkt beginnt, bezieht er sich auf das with - sonst auf die aktive Seite (die auch eine andere sein kann).
Der Code

With Sheets("Wartung")
.Unprotect
.Range("A4:H365").Sort Key1:=.Range("E4"), Order1:=xlAscending
.Protect
End With

macht exakt das gleiche wie

Sheets("Wartung").Unprotect
Sheets("Wartung").Range("A4:H365").Sort Key1:=Sheets("Wartung").Range("E4"), Order1:=xlAscending
Sheets("Wartung").Protect

Hoffe geholfen zu haben,
Gruß,
Klaus M.vdT.
Anzeige
AW: Vielen vielen Dank
04.09.2006 15:51:09
UweD
Hallo
so dürfte er die Überschrift erkennen:
Header:=xlYes
...
With Sheets("Wartung")
.Unprotect
.Range("A2:H365").Sort Key1:=Range("E3"), Order1:=xlAscending, Header:=xlYes
.Protect
End With
...
Gruß UweD
(Rückmeldung wäre schön)
Sortieren
04.09.2006 16:38:44
Thorsten
Hallo Uwe,
hab ich mal eingegeben, aber er sagt mir immer Laufzeitfehler '1004' und dass der Sortierbezug nicht stimmt. Und wenn ich auf debuggen drücke erzält er mir, dass in der 4. Zeile von unten was nicht stimmt, also die .Range~.

Sub Makro2()
If MsgBox("Sollen die Datensätze nun sortiert werden?", vbYesNo, "Sortieren") = vbNo Then Exit Sub
With Sheets("Wartung")
.Unprotect
.Range("A3:H365").Sort Key1:=Range("E4"), Order1:=xlAscending, Header:=xlYes
.Protect
End With
With Sheets("Prüfung")
.Unprotect
.Range("A3:H365").Sort Key1:=Range("E4"), Order1:=xlAscending, Header:=xlYes
.Protect
End With
End Sub

Weißt Du da einen Rat? Danke im Voraus.
Gruß Thorsten
Anzeige
AW: Sortieren
04.09.2006 16:48:58
Kurt
Key1:=.Range("E4")
Den . (Punkt) vor Range beachten!
mfg Kurt
AW: Kann man ein Button zum sortieren einfügen?
04.09.2006 14:28:46
Thorsten
Hallo Klaus,
also das mit der Toolbox habe ich jetzt hinbekommen. Zumindest wird sie angezeigt. Aber ich kann "Befehlszeile" nicht anklicken. Das Kästchen ist grau hinterlegt. Meinen Code habe ich jetzt in "Module" gespeichert und bei Workbook open nur Call MeinCode eingegeben. Ist das so richtig? Zumindest funktioniert das. Wo muss ich denn das mit den CommandButtons hinschreiben? Auch in Module, oder in Tabelle 1 und Tabelle 2? Nochmal vielen Dank für Deine Mühe.
Gruß Thorsten
AW: Kann man ein Button zum sortieren einfügen?
04.09.2006 14:36:54
Thorsten
Hallo Namensfetter, in der Toolbox ist doch rechts ein Zeichen mit einem Zikel und Lineal, dass mußt du anklicken. Dann Doppelklick auf dein Button und Zwischen die Zeilen Commandbutten1_Click() und End Sub muß Modul1. und den Namen Wählen, das wars.
Liebe Grüße aus Thüringen-ein begeisteter Forumanhänger
Gruß Torte
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen