Hallo zusammen,
ich habe mal wieder ein kleines Problemchen....
Per VBA befülle ich ein Listenfeld mit Me.lstVorhanden.RowSource = ... Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & ... usw.
Dieses Listenfeld möchte ich anschließend nach der letzten Spalte aufsteigend sortieren lassen.
Geht das?
Vielen dank
Gruß Christoph
Hallo
Über die VBA Funktion " Sort " kann eine "ASC" aufsteigend "DESC" absteigende sortierung vorgenommen werden
Ja, aber wo und wie muss ich das einbauen?
Hallo,
zeige mal genau, wie Du das Listenfeld per VBA befüllst. Mit dem oben gezeigten Codefragmenten kann ich nichts anfangen.
Hi,
so wird das Listenfeld zusammengebaut:
If Not IsNull(Me.OpenArgs) Then
Set rstFirma = CurrentDb.OpenRecordset("SELECT * FROM vFirma")
While Not rstFirma.EOF
sSuchstring = rstFirma!Nummer & "-"
For n = 1 To Len(Me.OpenArgs) - (Len(sSuchstring) + 7)
If Mid(Me.OpenArgs, n, Len(sSuchstring)) = sSuchstring Then
sIdentnummer = Mid(Me.OpenArgs, n, Len(sSuchstring) + 8)
If ch = False Then Me.lstVorhanden.RowSource = "Identnummer;Bezeichnung;Typ/Ausführung;Messbereich/Größe;Tol.;Einh.;Standort;Abteilung;Arbeitsplatz;Ausgabe;Status;Fälligkeit;IDoWAG;"
If ch = True Then Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & sIdentnummer & ";"
bez = Nz(DLookup("Bezeichnung", "PMDB", "Identnr='" & sIdentnummer & "'"), "")
If Sprache = "EN" Then
bez = Nz(DLookup("Name_EN", "vBezeichnung", "Nummer='" & bez & "'"), "") & ";"
Else
bez = Nz(DLookup("Name", "vBezeichnung", "Nummer='" & bez & "'"), "") & ";"
End If
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & bez
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Typ", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Messbereich", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Toleranz", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Einheit", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Standort", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Abteilung", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Arbeitsplatz", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("TempAusgabe", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Status", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("Faelligkeit", "PMDB", "Identnr='" & sIdentnummer & "'"), "") & ";"
Me.lstVorhanden.RowSource = Me.lstVorhanden.RowSource & Nz(DLookup("IDoWAG", "PMDB", "Identnr='" & sIdentnummer & "'"), "")
ch = True
End If
Next
rstFirma.MoveNext
Wend
rstFirma.Close
If ch = False Then Me.lstVorhanden.RowSource = ";;Keine Verweise vorhanden"
End If
Hallo,
das Vorhaben halte ich für ziemlich abenteuerlich. Hast Du keine Tabelle die Du dem Listenfeld zuweisen kannst?
Wenn nein warum nicht.
Eine Werteliste für ein Listenfeld ist eher unbrauchbar als wirklich nützlich. Und die auch noch per VBA zusammengebaut.
Hi,
das hat damit zu tun, dass in einem Datensatz Beziehungen zu anderen Datensätzen vorhanden sein können, die man manuell einträgt mittel Identnummer. Bei Doppelklick auf das Beziehungsfeld sucht er die IDs raus und prüft diese ob vorhanden und listet dann alle in einem neuen Form mit Listenfeld auf.
Hier kann ich dann die IDs anklicken und komme dann wiederum auf diese Stammdaten.
Gruß Christoph
Hallo,
ZitatBei Doppelklick auf das Beziehungsfeld sucht er die IDs raus und prüft diese ob vorhanden und listet dann alle in einem neuen Form mit Listenfeld auf.
das kannst Du doch viel einfacher mit einer Abfrage machen mit der ID als Where Klausel. Das Listenfeld wird an dies Abfrage gebunden.
Ich muss aber zuerst das Beziehungsfeld auslesen und prüfen ob überhaupt was drin ist. Denn das feld kann auch mit anderen Daten befüllt sein. Er prüft vorher nach bestimmten Zeichen, die in der ID enthalten sind.
Hallo,
das kannst Du doch unabhängig von der Abfrage prüfen.
ZitatDenn das feld kann auch mit anderen Daten befüllt sein.
Was heißt mit anderen Daten? Ein Beziehungfeld ist im Regelfall ein Zahlenfeld und sonst nichts.
Hi, habe es hier nur so als Beziehungsfeld betitelt. Ist eigentlich ein freies Textfeld, bei dem es keine Einschränkungen gibt.
Bsp. Datensatz "8-4711". In diesem Datensatz steht im o. g. Textfeld "8-4712, 8-4713, weitere Anhänge siehe Dok."
Wenn ich dann dieses Textfeld anklicke, sucht er nach dem Zeichen "-" und liest dann die ID aus. In diesem Fall werden die beiden IDs aufgelistet und ich kann per Klick zu diesen Datensätzen springen.
Gruß Christoph
Hallo,
mein einziger Kommentar: Ohjeee :o ;)
Mein einziger Ratschlag: Befasse Dich zunächst DRINGEND mit Normalisierung (Links sind in meiner Signatur) und bau die DB , sprich die Tabellen, entsprechend um, sonst wird das Ganze nix... 8) ;)
Dies war die schnellste Möglichkeit Beziehungen zu anderen Datensätze realisieren zu können. Und das wichtigste dabei ist...es funktioniert !!!
Dafür habe ich leider keine Zeit. Möchte eigentlich nur ein kurze Hilfe, wie ich die Sortierung ändern/festlegen kann.
Hallo,
naja, die Zeit wirst Du jetzt wohl trotzdem investieren müssen...
Eine Möglichkeit wäre, die WertListe-Elemente vor dem Zusammenbau zum Rowsource-String zu sortieren:
http://www.dbwiki.net/wiki/VBA_Tipp:_Bubblesort
Hallo,
ZitatMöchte eigentlich nur ein kurze Hilfe, wie ich die Sortierung ändern/festlegen kann.
Das ist mit einer kurzen Hilfe nicht getan. Der Aufwand ist auf Grund des völlig falschen Datenmodells enorm. Siehe Link von Franz.
Und um es noch mal deutlich zu sagen, Du musst
erst sortieren und dann den Werteliste String zusammenbauen.
So wie Du das jetzt hast, halte ich es für ausgeschlossen das zu sortieren, es geht nicht, die Werteliste ist ja fertig.
Also denkbar wäre folgendes:
- Array mit den Werten füllen
- Array sortieren (mit Bubblesort z.B.)
- Werteliste aus sortiertem Array füllen.
Vermutlich hat aber die Ausgangstabelle noch nicht mal einen Primärschlüssel, sodass der Aufwand für das Array geradezu gigantisch wird, da alle Spalten in das Array geschrieben werden müssen und beim Sortieren auch die Position im Array getauscht werden muss, für
alle angezeigten Spalten.
Da ich das aber noch nie gemacht und noch nie benötigt habe, kann ich nicht weiter helfen.
hallo
oder du zelegst deine ids so das du sie als Where In klausel an einen sql-string übergibst so das z.b. folgender string entsteht:
sql = "Select Identnr, Bezeichnung, typ, Messbereich, ... from PMDB where Identnr In (" & deinStringMitIdsUndKomma & ") order by ..."
diesen sql string übergibst du dann an die liste.rowsource. Was hier nicht berücksichtigt wurde ist das Thema mit der Sprache.
Die erwähnte Verwendung von Arrays wäre aber auch eine Möglichkeit.