Hallo!
Ich hab da eine frage zu den Listenfeldern ?
Mein 1. Listenfeld bezieht seine Daten aus den initialisierten Recordset aus einer abfrage im Form_Load Ereignis und ist ungebunden
Das 2. Listenfeld ist ungebunden und einspaltig nun möchte ich zur späteren weiteren Verarbeitung Einträge aus 1 in 2 schreiben
Das mit der folgenden Prozedur auch hinhaut ,da es aber so nicht schön aussieht und ich mit den aus lesen Probleme habe möchte ich es in die einzelnen Column´s schreiben lassen
Bekomme es aber Leiter nicht hin
Option Compare Database
Option Explicit
Dim items$
Private Sub Befehl117_Click()
Dim z%
For z = 0 To IstBank.ListCount - 1
If IstBank.Selected(z) = True Then
items = items & IstBank.Column(0, z) & " " & IstBank.Column(1, z) & " " & IstBank.Column(2, z) & _
" " & IstBank.Column(3, z) & " " & IstBank.Column(4, z) & ";"
End If
Next z
IstBankMerken.RowSource = ""
IstBankMerken.RowSourceType = "Value List"
IstBankMerken.RowSource = items
End Sub
Ich habe auch schon versucht es über die rst.FindFirst "BankID = " & Me.IstBank.Column(0)
Versucht aber ich bekomme es nicht hin den selektierten Eintrag anzufügen
Wenn ihr einen Lösungsansatz für mich hättet wäre ich sehr dankbar
Gruß Frank
Hallo,
wenn ich recht verstehe, willst Du die im ersten Listenfeld markierten Einträge (Zeilen) in ein zweites Listenfeld übertragen...
Private Sub Befehl117_Click()
Dim items As String, itm
For each itm in Me!IstBank.Itemsselected
items = items & Me!IstBank.Column(0, itm) & ";" & Me!IstBank.Column(1,tm) & ";" & Me!IstBank.Column(2, itm) & _
";" & Me!IstBank.Column(3, itm) & ";" & Me!IstBank.Column(4,itm) & ";"
Next
Me!IstBankMerken.ColumnCount = 5
Me!IstBankMerken.RowSourceType = "Value List"
Me!IstBankMerken.RowSource = items
End Sub
N´Abend DF6GL
Danke für die Lösung funktioniert prima !
Eine frage hätte ich noch dazu :
ist es möglich den Eintrag Bzw. das Listenfeld auch beim schlissen des Formulares nicht zu verlieren also ihn/es temporär bis zum manuellen löschen zu speichern !
Gruß Frank und vielen Dank !
Hallo,
nein, das ist nicht möglich, weil konzeptionell nicht vorgesehen. Daten werden hauptsächlich in Tabellen ( und ausnajmsweise an ein paar anderen Stellen ) gespeichert und nicht in Formularen....
Hallo,
Zitat
ist es möglich den Eintrag Bzw. das Listenfeld auch beim schlissen des Formulares nicht zu verlieren also ihn/es temporär bis zum manuellen löschen zu speichern
Zitat
nein, das ist nicht möglich, weil konzeptionell nicht vorgesehen. Daten werden hauptsächlich in Tabellen ( und ausnajmsweise an ein paar anderen Stellen ) gespeichert und nicht in Formularen....
Prinzipiell richtig, nur hier hast Du eine temporär erstellte Werteliste (String). Die/den müsstest Du z.B. in die Tag-Eigenschaft der 2. Liste schreiben können (bis 2048 Zeichen). Um das wieder zu löschen weist Du der Eigenschaft eine leere Zeichenkette zu ("").
Du musst allerdings dafür sorgen, dass das Formular beim Schliessen gespeichert wird (Änderungen speichern? Ja).
Falls das nicht funzt (hab's jetzt nicht getestet), geht vielleicht auch, den String in eine statische globale Variable in einem allgemeinen Modul zu speichern.
hth
beaker s.a.
Hallo,
ZitatDie/den müsstest Du z.B. in die Tag-Eigenschaft der 2. Liste schreiben können
das funktioniert zwar in der Normalansicht des Form, kann aber nicht beim Schliessen des Forms gespeichert werden. Um dauerhaft zu speichern, muss das Form in der Entwurfsansicht geöffnet sein, wo wiederum keine Datenbearbeitung möglich ist. (Sicherlich könnte man auch irgendein anderes Objekt bearbeiten, das das Speichern eines Strings in irgendeiner seiner Eigenschaften erlaubt und den String wieder von dort auslesen, aber das ist lediglich Murkserei und führt bei nächster Gelegenheit zum Absturz der DB.)
Zitat
geht vielleicht auch, den String in eine statische globale Variable in einem allgemeinen Modul zu speichern
Das ist durchaus möglich, die Variable existiert aber nur während der aktuellen Access-Sitzung. Beim nächsten Starten der DB-Anwendung ist der String wieder dahin (im worst-case Fall sogar auch schon nach Auftreten eines nicht abgefangenen Laufzeitfehlers)
Insofern sind
Zitatausnahmsweise an ein paar anderen Stellen
zu nennen:
Speichern in einer anwenderdefinierten DB-Eigenschaft (Property)
Speichern in einer ext. Text-Datei
.
.
Grundsätzlich würde ich bezgl. der Ausgangssituation aber raten, das Bearbeitungskonzept neu zu überdenken. (Benutzung von "Tabelle/Abfrage" im Listenfeld, Markieren von Datensätzen mittels Hilfsfeld in der Tabelle, Füllen der Listenfelder mittels dynamisch erzeutem SQL-String unter Nutzung des Primärschlüsselfeldes , etc)
Hallo DF6GL, (oder hast Du auch einen richtigen Namen? ;-)
Zitat
das funktioniert zwar in der Normalansicht des Form, kann aber nicht beim Schliessen des Forms gespeichert werden. Um dauerhaft zu speichern, muss das Form in der Entwurfsansicht geöffnet sein, wo wiederum keine Datenbearbeitung möglich ist.
Ja, stimmt natürlich; - mal wieder so'n Schnellschuss.
Zitat
Das ist durchaus möglich, die Variable existiert aber nur während der aktuellen Access-Sitzung. Beim nächsten Starten der DB-Anwendung ist der String wieder dahin (im worst-case Fall sogar auch schon nach Auftreten eines nicht abgefangenen Laufzeitfehlers)
Auch wieder richtig. War aber davon ausgegangen, dass der OP das nicht über die Länge der Sitzung hinaus gespeichert haben wollte.
Zitat
Speichern in einer anwenderdefinierten DB-Eigenschaft (Property)
Speichern in einer ext. Text-Datei
.
.
Möglichkeiten gibt es viele, da wird er schon das richtige für sich finden. Ich wollte ja auch nur aufzeigen, dass Dein
Zitat
nein, das ist nicht möglich
nicht so kategorisch ist, wie es rüberkommt.
gruss
ekkehard
Hallo,
besser kategorisch als nicht funktionierende Schnellschüsse.... 8)
Zitatoder hast Du auch einen richtigen Namen?
lies ihn halt...
Hallo Franz,
Zitat
besser kategorisch als nicht funktionierende Schnellschüsse....
Jein, wenn's doch Möglichkeiten gibt. VBA ist doch irgendwie wie ein Labyrinth; - machmal führen mehrere Wege zum Ziel, und manchmal landet man in einer Sackgasse ;).
Zitat
lies ihn halt...
Schäm :-[
gruss
ekkehard
Hallo,
ZitatJein ...
Würde ich für einen nicht funktionierenden Schnellschuß nicht anwenden - das passt dann auch irgendwie nicht recht zusammen ::)
ZitatVBA ist doch irgendwie wie ein Labyrinth
Für manche ... ;)
Hallo an alle!
Danke für eure antworten die waren sehr hilfreich für mich
Die Frage mit dem temporären speichern war nur eine fixe Idee rein aus Interesse
Aber ich bin jetzt beim teste auf etwas interessantes Gestosen
ich liste jetzt sagen wir mal 5 Einträge über die Prozedur in das 2. Feld der sin besteht darin das ich mir aus 19000 datensetzen die aus wähle die ich benötige und sie darin merke
dann wähle ich einen aus der dann im Bearbeitungsformular
aber das ist nur neben Sache
So zum Tema :
Für das listen Feld habe ich einen Restbutton angelegt und folgende 2 Codes hinterlegt hinterlegt
Bzw. abwechselnd getestet
Beide funktionieren auch und leeren das Listenfeld aber der Witz an der Sache ist
das wenn ich dann erneut einen Datensatz in das Listenfeld Transportiere
die anderen wieder da sind und der neue einfach unten abgefügt wird anstand er der einzige neue ist
und oben steht
Da ich oben gelesen habe das das dann evtl. in einer variablen bis zum schlissen des Formulars gespeichert wird was mach ich da jetzt falsch ?
Denn wenn es dann zu einem Fehler kommt stürzt die Datenbank ab!
Was bei einer 32bit Version von Office 2010 auf Win7 Öfters passiert
Wenn ich den code so verwende :
Dim z As String
For z = 0 To IstOrt.ListCount - 1
If Me!IstOrt.Selected(z) = True Then
items = items & IstOrt.Column(0, z) & ";" & IstOrt.Column(1, z) & ";" & IstOrt.Column(2, z) & _
";" & IstOrt.Column(3, z) & ";" & IstOrt.Column(4, z) & ";"
End If
Next z
Me!IstOrtMerken.ColumnCount = 5
Me!IstOrtMerken.RowSource = ""
Me!IstOrtMerken.RowSourceType = "Value List"
Me!IstOrtMerken.RowSource = items
Me!CmdReset.Visible = True
Zum Löschen:
Dim i As Integer
Dim q As Integer
q = IstBankMerken.ListCount
i = 0
Do Until i = q
IstBankMerken.RowSource = ""
i = i + 1
Loop
Me!CmdMerken.SetFocus
Me!CmdReset.Visible = False
Me!IstBankMerken.RowSource = ""
Zu einzelnen löschen eines markirten eintrags habe ich den hier verwendet :
ListBox1.SetFocus
If ListBox1.ListCount >= 1 Then
'Wenn kein Element ausgewählt wurde, letztes Element der Liste wählen.
If ListBox1.ListIndex = -1 Then
ListBox1.ListIndex = ListBox1.ListCount - 1
End If
ListBox1.RemoveItem (ListBox1.ListIndex)
End If
Gruß Frank der der im Labyrint wandelt !