Office: Recordset Sortierung

Helfe beim Thema Recordset Sortierung in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, Ich habe folgendes Problem. Ich nutze ein Recordset um daraus mit bestimmten Filtern eine ComboBox zu füllen. Allerdings will ich die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Till41, 14. Januar 2017.

  1. Recordset Sortierung


    Hallo zusammen,

    Ich habe folgendes Problem. Ich nutze ein Recordset um daraus mit bestimmten Filtern eine ComboBox zu füllen. Allerdings will ich die Daten vorher sortieren. Bei den Daten handelt es sich um IDs im Format SSS-SSS-II-II (S = String, I = Integer).

    Ich würde jetzt gerne mein recordset mithilfe von

    Code:
    sortieren. Das Ziel davon ist es, die Daten zuerst alphabetisch und dann numerisch zu sortieren, wobei die alphabetische Sortierung Vorrang hat. Zur Erklärung: Die ID beginnt mit einem Firmennamen und endet mit dem Jahr und einer laufenden Nummer. Zuerst soll also nach der ID sortiert werden und daraufhin nach der Position, da bei einem reinen Sortieren mit ausschließlich der ID, die 10 auf die 1 folgt (Textvergleich).

    Ich hoffe ihr könnt mir weiterhelfen!

    Viele Grüße
    Till

    :)
     
  2. Hallo Till,

    verstehe ich das richtig, dass die Zahlenanteile sowohl ein- als auch zweistellig sein können?
    Wird das Muster streng eingehalten, mit maximal 2 stelligen Zahlen oder sind auch mehrstellige Zahlen denkbar?

    Da die Daten in einem Recordset vorliegen: Wie liegen die Daten in der Datenbank vor? Liegt die ID als ganzes vor oder wird diese erst zusammengesetzt? Kann die Formatierung dort nicht gleich sinnvoll gestaltet werden?

    Grüße
    EarlFred
     
    EarlFred, 16. Januar 2017
    #2
  3. Tut mir leid, wenn man so lange mit einem Thema arbeitet, dann vergisst man manchmal, dass andere nicht so tief im Thema drin sind.

    Also die Daten liegen als ganz normale Excel Tabelle vor, allerdings wird damit so viel gearbeitet, dass ich mich aufgrund der Performance für ein Recordset entschieden habe.

    Jedes Mal, wenn ein Nutzer einen neuen Eintrag hinzufügt (UserForm) wird eine ID für diesen Eintrag generiert. Diese ist im vorderen Teil immer gleich, allerdings ändern sich die Zahlen Bereiche. Je nachdem in welchem Jahr der Eintrag hinzugefügt wird, ändert sich diese Variable. Der letzte Teil ist der Teil, der sich bei jedem Mal ändert. Er besteht aus einer fortlaufenden Nummer, kann also (theoretisch) auch mal dreistellig werden. Ist aber eher unwahrscheinlich.

    Das Format der ID sollte, bzw. kann eigentlich überhaupt nicht mehr geändert werden.

    Vielen Dank für deine schnelle Rückmeldung und damit die Klärung der offenen Fragen!
     
  4. Recordset Sortierung

    Hallo Till,

    spannendes Thema. Diverse Tests / Beobachtungen haben ergeben, dass ein Recordset (SQL) in der Excelumgebung Schwierigkeiten hat, Performancevorteile gegenüber den "richtigen" Bordmitteln zu erlangen, oft genug war SQL hier sogar langsamer unterwegs, begründet vor allem in der fehlenden Möglichkeit der Indexierung. Wer also auf SQL-"Sprachgewohnheiten" verzichten kann, weil er andere Sprachen beherrscht, kann damit sogar schneller unterwegs sein. Wie alles im Leben: Es gibt mehrere Medaillenseiten mit Vor- und Nachteilen. Aber OK, soll nicht Thema sein.

    Wir sind also excelintern, da würde ich ein einfaches Datenfeld nehmen. Dann wäre ein handwerklich einfacher Schritt: Trenne die IDs auf, jeweils nach "-". Danach setzt Du sie mit ausreichend "vielstelligen" Zahlen wieder zusammen, z. B. 5 Stellen. Sortieren kannst Du VBA-intern hiermit:
    https://msdn.microsoft.com/de-de/library/bb979305.aspx

    Irgendwie so:
    Code:
    Das Datenfeld fOut kann direkt der List-Eigenschaft der Combobox / Listbox zugewiesen werden.

    Grüße
    EarlFred
     
    EarlFred, 16. Januar 2017
    #4
  5. Neben der Geschwindigkeit, die zumindest deutlich schneller ist, als das, was ich vorher hatte, finde ich auch die Syntax deutlich besser/verständlicher. Die Schreibweise etc. ist eingängiger und eher objektorientiert, wie ich finde.

    Zu deinem Code. Wie kriege ich den Teil meines Recordsets, den ich sortieren will jetzt in ein einfaches Datenfeld? Muss ich es durchlaufen und in das Array einfügen oder kann das Ganze mit einem Befehl passieren?
     
  6. Noch etwas ganz anderes. In meinem Makro nutze ich eine Funktion zum Speichern von Dateien. Allerdings erhalte ich in letzter Zeit oft die Fehlermeldung. "Automatisierungsfehler. Das aufgerufene Objekt wurde von den Clients getrennt". Daraufhin hängt sich Excel auf. Ziemlich unangenehm und für mich irgendwie unverständlich. Hier die Funktion:

    Code:
    Zu erwähnen ist vielleicht noch, dass der Fehler nur in dem IF-Teil auftritt. Wenn ich auf abbrechen klicke, dann wird die Fehlermeldung angezeigt und das Makro beendet - wie gewünscht.

    Viele Grüße
    Till
     
  7. Mir ist dazu noch eingefallen, dass, wenn ich schrittweise debugge, der Fehler nicht auftritt. Ist mir ein Rätsel - vielleicht habt ihr ja eine Idee.

    Code:
    Diesen Teil jetzt mit der Formatänderung verstehe ich nicht wirklich. Könntest du, wenn es nicht zu viel Mühen macht, versuchen mir das in Worten zu erklären?

    Code:
    Dass ich dann fOut mit dem QuickSort sortiere ist soweit klar, nur die darunter stehende Formatänderung verwirrt mich wieder ein bisschen.

    Code:
    Vielen Dank schonmal bis hierhin!
     
  8. Recordset Sortierung

    Schnellschuss ohne Ahnung:
    Das könnte dann etwas Zeitkritisches bedeuten: Ein Prozess ist vor dem anderen noch nicht vorüber. Möglicherweise herausfinden und dann an der Stelle verlangsamen oder auf ein Ergebnis warten.
     
  9. Hmm das klingt logisch, allerdings habe ich keine Ahnung, wo das sein könnte. Du denkst, dass das Speichern noch nicht abgeschlossen ist, das Makro aber weiter arbeitet?
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  10. Moin Till,

    versuche mal ob ein DoEvents am Beginn (oder am Ende) der Funktion DateiSpeichern (und evtl. auch der Funktion DateiSchließen) Besserung bringt.

    Viele Grüße,
    Michael
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    CruelDevice, 16. Januar 2017
    #10
  11. Zum Eingangspost:
    Ein Datenbänkler würde praktisch nie ein Recordset sortieren, sondern eine wie gewünscht sortierte Abfrage zur Erzeugung des Recordsets einsetzen (SQL-Sortierung statt VBA-Sortierung).
     
  12. Hallo Till,

    ich grüße Dich an diesem neuen Tag.

    gutes Stichwort: Deine neue Frage hat doch mit Sortieren von Daten/ Recordsets nun wirklich nichts gemein. Für mich irgendwie unverständlich, warum Du nicht ein neues Thema dafür aufmachst, um die Übersicht zu behalten.
    Tipp am Rande: Wenn Du Code postest, dann poste alles, was dazu gehört.
    Die Zeile Funktionen.DateiSchließen (.SelectedItems(1)) ist weder erläutert noch per Code dokumentiert. Was für eine Analyse Deines Codes erwartest Du also?

    Zu Deinem wirren Getwitter von gestern:
    Mein Code sieht garnicht vor, dass Du ein Recordset verwendest. Aber wenn Du willst, probier's mal mit GetRows, wenn Dein Recordsettyp die Methode unterstützt.

    Was willst Du genau wissen? Was genau verstehst Du / verstehst Du nicht? Die verwendeten Methoden gehören alle zum (Excel-)VBA, sind also mit der F1 schnell selbst recherchiert. Oder verstehst Du nicht, warum ich das mache?

    Auf dieser Rückfrage aufbauend: Hast Du mal drüber nachgedacht, die Teile des ID-Schlüssels spaltenweise abzulegen (zusätzlich zum kombinierten), dann kannst Du Eberhards Tipp nämlich ganz einfach umsetzen.

    Grüße
    EarlFred
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    EarlFred, 16. Januar 2017
    #12
  13. Recordset Sortierung

    Das mag sein, allerdings bin ich kein Datenbänkler und habe auch keine tatsächliche Datenbank auch wenn man ein Excel-Blatt vermutlich auch so bezeichnen kann - ich weiß es nicht. Ich bin blutiger Anfänger was Datenbanken und Recordsets angeht und würde mich daher über ein nähere Erläuterung deiner Aussage freuen.
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
  14. Eine Erläuterung wäre wohl am einfachsten und direktesten, wenn Du erläuterst, wie Du zu Deinem Recordset kommst und wie verwendete Tabellen aussehen.

    Eine Spalte kann man nur nach einer Machart sortieren, und die Art der Sortierung ergibt sich aus dem Inhalt. Eine Zahlensortierung hätte man, wenn man eine Sortierung rein auf Zahlen anwendet.

    Entgegen meiner Aussage kann man dann auch eine natürliche Sortierung anwenden. Die ist aber in der Umsetzung alles andere als simpel.
     
  15. Hallo EarlFred (und natürlich die anderen),

    Tut mir leid, wenn ich hier Verwirrung stifte. Das war logischerweise nicht meine Absicht. Gut zu wissen, dass es lieber gesehen ist einen neuen Thread zu öffnen, das werde ich in Zukunft tun!

    Nun zurück zur Sortierung. Ich habe jetzt schon sehr oft gelesen - auch bei meiner Recherche, dass man aufhören sollte zu sortieren und einfach per SQL Abfrage die Daten einlesen sollte. Kann ich innerhalb von VBA - ich bewege mich ja nur in Excel - eine SQL Abfrage machen? Derzeit nutze ich Code von Martin Dreher, einem User der mir geholfen hat, um ein RecordSet zu erstellen:

    Code:
    Ich glaube ich sollte in Zukunft bei meinen Threads mehr nachdenken, bevor ich etwas schreibe. Denken hilft bekanntlich *rolleyes.gif* *tongue.gif*

    Trotzdem danke für deine ausführliche Antwort!

    Falls ich auf deinen Vorschlag vom Anfang zurückgreifen würde, muss ich ja noch die offenen Fragen klären, die ich anscheinend nicht ausreichend erklärt habe. Ich verstehe allgemein das Formatumwandeln nicht. Was passiert in diesem Code?

    Code:
    Auch da entschuldige ich mich nochmal, ist mir nicht aufgefallen!
    Hier der fehlende Code:

    Code:
    Ich hoffe, dass euch durch meine "Unfähigkeit" nicht die Lust vergeht, mir zu helfen *upps

    Viele Grüße
    Till
     
Thema:

Recordset Sortierung

Die Seite wird geladen...
  1. Recordset Sortierung - Similar Threads - Recordset Sortierung

  2. Apostroph in sql Recordset

    in Microsoft Access Hilfe
    Apostroph in sql Recordset: Hallo Gemeinde, einen hätte ich noch: sqlTitel = "SELECT * FROM tbl_Files_Edited WHERE Titel='" & strTitel & "'" Set rs1 = db.OpenRecordset(sqlTitel) Enthält strTitel einen...
  3. Recordset auf einmal nicht mehr aktualisierbar

    in Microsoft Access Hilfe
    Recordset auf einmal nicht mehr aktualisierbar: Hallo, ich bin bei der Weiterentwicklung einer seit Jahren funktionierenden Prozedur, bei der u.a. per SQL Datensätze nach einem bestimmten Feld sortiert aus einer Tabelle in ein Recordset...
  4. Recordset

    in Microsoft Excel Hilfe
    Recordset: Hallo Zusammen, ich möchte gern aus einer Excel-Tabelle Werte über ein Recordset in eine Access Tabelle einlesen. In der Anlage die vereinfachte Struktur der Daten. Im Bsp 1 werden die Daten...
  5. Recordset wird nicht erfasst

    in Microsoft Access Hilfe
    Recordset wird nicht erfasst: Liebe Access-Profis, wieder bin ich am Ende der Weisheit; dieses Mal geht es um einen VBA-Code, der einen Recordset nicht identifiziert. Das Vorhaben: Im Formular 'Aktuelles Schuljahr' steht in...
  6. Recordset-Feldname mit Variable verbinden

    in Microsoft Access Hilfe
    Recordset-Feldname mit Variable verbinden: Hallo, hat jemand einen Tipp für mich, wie ich einen Recordset-Feldnamen mit einer Variablen kombinieren kann. Ein Pivot-Recordset stellt mir Feldnamen zur Verfügung, die etwa so aussehen:...
  7. Recordset Listenfeld füllen

    in Microsoft Access Hilfe
    Recordset Listenfeld füllen: Hallo *Smilie Ich möchte gern mein Listenfeld füllen.. ______________ 1) Bei dieser Methode kommt es (willkürlich) zu einem Absturz: Set Forms("Freigabetool").Controls(liste0).Recordset = rs...
  8. ID aus SQL Recordset ermitteln - Geänderter Treiber?

    in Microsoft Access Hilfe
    ID aus SQL Recordset ermitteln - Geänderter Treiber?: ch habe ein akutes Problem beim Zugriff auf den SQL Server. Seit vielen Jahren nutze ich folgendes Prinzip. Im VBA lege ich einen neuen Datensatz in einem Recordset an. Da der SQL Server die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden