Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Werte nach Übernahme sortieren

Betrifft: Werte nach Übernahme sortieren von: Sylvio
Geschrieben am: 10.07.2013 11:42:13

Hallo Leute,

habe eine Userform mit zwei Textboxen in die ich Text eingebe der mir nach klick auf übernehmen in drei Tabellenblätter eingetragen wird.
Text aus Textbox1 in Tabelle1 ab Zeile A4 und gesplittet in Tabelle2 ab Zeile A1
Text aus Textbox2 in Tabelle3 ab Zeile A1.
Nun würde ich gerne das nach klick auf Übernahme die werte absteigend sortiert sind!
Habe schon einiges gefunden und ausprobiert hat aber nix funktioniert!

Hoffe ihr könnt helfen!

Gruß Sylvio

  

Betrifft: Makrorekorder von: Klaus M.vdT.
Geschrieben am: 10.07.2013 11:46:31

Hallo Sylvio,

sortiere die Tabelle einmal per Hand, lass dabei den Makrorekorder laufen.
Füge den Rekordercode da ein, wo der sonstige Code für "Übernahme" steht. Eventuell dynamisierst du den fixen Bereich aus dem Rekorder noch mit der variablen Zeilenanzahl.

Besser kann keiner helfen, da wir deine Datei nicht kennen.

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Makrorekorder von: Sylvio
Geschrieben am: 10.07.2013 11:55:42

danke für die schnelle Antwort!
das habe ich schon probiert!
anbei mal der Code der Userform der nur aus Daten_übernehmen_Click besteht!

Option Explicit

Private Sub Daten_übernehmen_Click()
Dim wsBau As Worksheet, wsArb As Worksheet, wsBauA As Worksheet
Dim lRowA As Long, lRowB As Long, lRowC As Long

Set wsBau = Worksheets("Baustellen")
Set wsBauA = Worksheets("BaustellenA")
Set wsArb = Worksheets("Arbeiten")

lRowA = wsBauA.Cells(Rows.Count, 1).End(xlUp).Row
lRowB = wsBau.Cells(Rows.Count, 1).End(xlUp).Row
lRowC = wsArb.Cells(Rows.Count, 1).End(xlUp).Row

If lRowB < 4 Then lRowB = 4 Else lRowB = lRowB + 1
If wsBauA.Range("A" & lRowA).Text = vbNullString Then lRowA = 1 Else lRowA = lRowA + 1
If wsArb.Range("A" & lRowC).Value = vbNullString Then lRowC = 1 Else lRowC = lRowC + 1

Worksheets("Baustellen").Cells(lRowB, 1) = TextBox1.Text
Worksheets("BaustellenA").Cells(lRowA, 1) = Trim(Split(TextBox1.Text, "/")(0))
If TextBox2.Text <> "" Then
  Worksheets("Arbeiten").Cells(lRowC, 1) = TextBox2.Text
Else
  Worksheets("Arbeiten").Cells(lRowC, 1) = "n.a."
End If
End Sub

Private Sub Fenster_schließen_Click()
'UserForm schließen
Unload UserForm
End Sub

Gruß Sylvio


  

Betrifft: Genau da ... von: Klaus M.vdT.
Geschrieben am: 10.07.2013 13:43:01

... kopierst du den Makrorekorder-Code hin, und gut ist.
Wenn du mehr Hilfe brauchst musst du schon mit mehr Informationen und/oder einer Mustertabelle rüber kommen. Ich allerdings muss hier aussteigen, denn:
du hast xl2003, für diese Version kann ich keine Sortierroutinen schreiben (ich bin da selbst auf den Rekorder angewiesen). Aber im Endeffekt, ob du den Record Button selbst drückst oder ich mach das für dich ...

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Genau da ... von: Sylvio
Geschrieben am: 10.07.2013 16:11:45

Habe es soweit hinbekommen nur schreibt er den neu eingegeben wert in die letzte Zeile
und erst nach Eingabe eines neuen wertes sortiert sich der vorherige wert!
Der neu eingegebene wert steht dann erstmal wieder in letzter Zeile! Unsortiert!

Gruß Sylvio


  

Betrifft: dann dreh es um! von: Klaus M.vdT.
Geschrieben am: 10.07.2013 17:00:48

Hi,

wenn es falschrum läuft, dann dreh es doch um. ERST eintragen, DANN sortieren.

Grüße,
Klaus M.vdT.


  

Betrifft: AW: dann dreh es um! von: Sylvio
Geschrieben am: 10.07.2013 17:41:44

so gemacht und funktioniert!
Leider nur auf selektierter Tabelle!
Anbei meine Mappe!

https://www.herber.de/bbs/user/86298.xls

Gruß Sylvio


  

Betrifft: AW: dann dreh es um! von: Klaus M.vdT.
Geschrieben am: 11.07.2013 08:19:39

Hallo Sylvio,

du musst auch den GANZEN Rekordercode mitnehmen! Der Rekorder hat doch bestimmt gesagt: Sheets("Xx").Activate, Range("A1:A16").select .... und so weiter. Wenn du das alles einfach ignorierst ist doch klar, dass nichts bei rauskommt. In deinem Beispiel wurde drei mal auf die "selection" sortiert, es war aber Codeseitig gar keine Selection vorhanden!! Sprich, der Code hat nur zufällig funktioniert.

Ich war mal so frei, das ganze von drei Sortier-Codes auf einen runterzubrechen, der in einer Schleife über die Blätter läuft.

'Sortieren Baustellen
Dim wks As Worksheet
Dim fRow As Long
Dim lRow As Long

For Each wks In Sheets(Array("Baustellen", "BaustellenA", "Arbeiten"))
    With wks
        lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        fRow = .Cells(lRow, 1).End(xlUp).Row
        .Range(.Cells(fRow, 1), .Cells(lRow, 1)).Sort _
            Key1:=.Cells(fRow, 1), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
            :=xlSortNormal
        End With
    End With
Next wks
Es wäre warscheinlich besser fürs Verständniss, pro Blatt einen eigenen Sortiercode zu benutzen. Das währe zwar länger und langsamer, aber intuitiver verständlich. Allerdings habe ich den Eindruck, dass du, sorry, dich null dafür interessierst was dein Code macht und einfach irgendwas per Copy Paste in dein Blatt haust ohne auch nur einen Buchstaben zu hinterfragen. Von daher pfeiff ich aufs einfach-halten und erklären und geb dir gleich den optimierten Code mit Schleife und variablen Sortierbedingungen.

Grüße,
Klaus M.vdT.


 

Beiträge aus den Excel-Beispielen zum Thema "Werte nach Übernahme sortieren"