| |
| 3D-Druck: 7 Gründe für den Einsatz in der Medizin, ein Fachartikel
|
Autor
|
Thema: listbox mit 2 spalten (13471 mal gelesen)
|
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 20. Aug. 2006 21:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Experten! Gibt es eine Möglichkeit eine Listbox mit zwei getrennten Spalten zu erstellen? D.h. ich bräuchte eine Listbox in die ich zum Beispiel folgende Daten jeweils in einer Zeile stehen habe. Name: Meier Vorname: Peter Geburtsort: Berlin Mein Hauptziel hierbei ist es später die beiden Spalten in der Listbox getrennt voneinander anzusprechen und wieder in Excel zu überführen zu können. Aus diesem Grund funktionieren Sachen wie Leerzeichen zwischen den Daten nicht. Gibt es eine Syntax mit der man schon beim Initialisieren der Listbox Name, Vorname, Geburtsort usw. in die erste Spalte der Listbox, Peter,Meier und Berlin in die zweite Spalte schreiben kann? Wichtig wäre auch das ich später z.B nur die zweite Spalte der Listbox in eine Exceltabelle auslesen kann. Vielen Dank schonmal im Vorraus!! MfG Jens
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kuwe Mitglied
Beiträge: 1 Registriert: 11.07.2006
|
erstellt am: 21. Aug. 2006 01:36 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
|
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 21. Aug. 2006 08:29 <-- editieren / zitieren --> Unities abgeben:
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 21. Aug. 2006 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
Hallo Jens, erzeug mal in nem leeren sheet eine ListBox. Jetzt mit RMT -> Eigenschaften In der Box siehst Du u.a. ColumnCount und ListFillRange Bsp: ColumnCount auf 2, ListFillRange auf A1:B10 Ergebnis siehst Du sofort. Ansonsten auf die F1 gedrückt und schon wird vieles klarer. Viel Spaß! Nicole edit: solltest Du allerdings tatsächlich den Wert Vorname: Peter in einer Zelle stehen haben , dann mußt Du die Daten wohl doch über VBA in die Listbox bringen... Oder schwer Inhalte splitten, könnte anstrengend werden, also lieber Eingaben trennen! ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
[Diese Nachricht wurde von runkelruebe am 21. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 21. Aug. 2006 11:27 <-- editieren / zitieren --> Unities abgeben:
Ok! Vielen Dank erstmal für die Tips! Ich habe jetzt soweit meine Listbox stehen (siehe Listbox.jpg). Mein Problem ist jetzt nur noch folgendes: Die Daten dieser Listbox sollen nun in eine Excel Tabelle zurückgegeben werden. Ich will aber nur die eigentlichen Daten wie z.B Peter, Meier, Berlin in den Zellen meiner Exceltabelle haben. Die Bezeichner Vorname, Name, Geburtsort sollen quasi als Überschrift der Spalte stehen (siehe tabelle.jpg). Sie werden also in eine andere Zelle gespeichert als die Daten. Frage: Ist das möglich? Kann ich in VBA sagen: Speichere mir die erste Spalte der Listbox, (also Vorname) in Cell(1,2) und die eigentlichen Daten in der zweite Spalte der Listbox (also Peter) in Cell (2,2)??? Wie ist die Syntax hierfür? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 21. Aug. 2006 11:29 <-- editieren / zitieren --> Unities abgeben:
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 21. Aug. 2006 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
bsp: Sub Auslesen() dim a as integer, t as integer For a = 0 To Tabelle1.MyListBox.ListCount - 1 t = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row + 1 Tabelle1.Cells(t, 1) = Tabelle1.MyListBox.List(a, 0) Tabelle1.Cells(t, 2) = Tabelle1.MyListBox.List(a, 1) Next a End Sub bsp Texte trennen nach DoppelPunkt: (ist eh schon da, also stell ich das mal mit rein, falls es wer braucht...) Sub DoppelPunkt() On Error Resume Next Dim cell As Range, arr1, i As Integer, wertA As String, wertB As String i = Tabelle1.MyListBox.ListCount For Each cell In Selection arr1 = Split(cell.Value, Chr(58)) wertA = arr1(0) wertB = arr1(1) Tabelle1.MyListBox.AddItem wertA Tabelle1.MyListBox.List(i, 1) = wertB i = i + 1 Next End Sub edit: for schleife eingebaut
------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... [Diese Nachricht wurde von runkelruebe am 21. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 21. Aug. 2006 12:42 <-- editieren / zitieren --> Unities abgeben:
|
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 21. Aug. 2006 15:51 <-- editieren / zitieren --> Unities abgeben:
Habs noch nicht ganz! Frage: Geht das ganze auch mit einer Userform, anstatt direkt in der Tabelle? Gibts da Unterschiede in der Sysntax? Hier ein Auszug aus meinem Programm: " Zum Initialisieren der Listbox" For t = 1 To ActiveWorkbook.Worksheets(1).Cells(5, Columns.Count).End(xlToRight).Column UserForm1.ListBox1.List(1, 0) = (Tabelle19.Cells(3, t)) Next t "Auslesen der Listbox" For i = 0 To UserForm1.ListBox1.ListCount - 1 ActiveSheet.Cells(1, x).Value = UserForm1.ListBox1.List(i, 0) ActiveSheet.Cells(k, x).Value = UserForm1.ListBox1.List(i, 1) next i '' x wird vorher in Inputbox eingegeben. Beim Initialisieren meldet er mir schon:"Laufzeitfehler 381, Eigenschaft List konnte nicht gesetzt werden. Index des Eigenschaftsfeldes ungültig." Wo liegt der Fehler???
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 21. Aug. 2006 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
kurze Vermutung: in dieser Zeile. Zitat: UserForm1.ListBox1.List(1, 0) = (Tabelle19.Cells(3, t))
1.: Du liest immer in den gleichen Eintrag aus, d.h. Du überschreibst den grade erst gemachten. das ist aber nichtder Grund für die Fehlermeldung. 2.: Die Sytax stimmt nach dem Gleichheitsszeichen nicht. Schau mal in mein "DoppelpunktAuslesen" 3.: ich schau nach Feierabend nochmal, kann grad nicht.. bis später! ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 21. Aug. 2006 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
kurz nachgeschoben:Du hast generell 2 Möglichkeiten, eine ListBox zu füllen: Code: userform1.ListBox1.AddItem Tabelle19.Cells(3, t)
oder:
Code: userform1.ListBox1.List(1, 0) = Tabelle19.Cells(3, t)
dann solltest Du allerdings mit Platzhalter arbeiten, um auch ne Liste zu bekommen:Code: userform1.ListBox1.List(a, 0) = Tabelle19.Cells(3, t) a = a + 1
bei meinen Klimpereien heute morgen habe ich aber festgestellt, daß ich bei einer leeren ListBox erstmal mit addItem arbeiten muß, sonst kommt die von Dir beschriebene Fehlermeldung. daher auch dieses seltsame: Code: Tabelle1.MyListBox.AddItem wertA Tabelle1.MyListBox.List(i, 1) = wertB
Außerdem:
Code: For t = 1 To ActiveWorkbook.Worksheets(1).Cells(5, Columns.Count).End(xlToLeft).Column
wenn Du denn die letzte beschriebene Spalte auslesen willst, sonst kannste auch direkt 256 schreiben Also: Code: For t = 1 To ActiveWorkbook.Worksheets(1).Cells(5, Columns.Count).End(xlToLeft).Column UserForm1.ListBox1.AddItem Tabelle19.Cells(3, t) Next t
hilft's schon?
------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 22. Aug. 2006 10:29 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen! Ja hat mir sehr weitergeholfen. Die Initialisierung der Listbox klappt schon soweit. das Auslesen aus Listbox 1 auch. Jedoch hab ich noch eine kleine Hürde. Es sollen nicht alle Daten ausgelesen werden, sondern nur selektierte Werte. Dafür hab ich mir ne 2. Listbox gemacht. Über eine Abfrage (siehe Code) ob eine Zeile selektiert ist werden nach Betätigen eines Schalters die selektierten Daten in Listbox 2 übernommen. Hier gibts allerdings Probleme! Die Zeile : UserForm1.ListBox2.AddItem UserForm1.ListBox1.List(a, 0) & vbTab & UserForm1.ListBox1.List(a, 1) funktioniert zwar für die Übernahme, allerdings Taugen die Daten dann nicht mehr für das Auslesen. eine ähnliche Lösung wie beim Initialisieren (siehe Fettdruck) klappt aber nicht! Keine Ahnung warum! Er meldet dann immer die Laufzeitfehler 381 Geschichte. Kann jemand einen Fehler entdecken? Was bei beim Initialisieren der Listbox1 geht, müsste doch auch bei der Übernahme in Listbox 2 funktionieren, oder??? Private Sub UserForm_Initialize() Dim a As Integer j = InputBox("Bitte geben Sie die gewünschte Zeilennummer ein:") ' wählt die aus der Datenbank zu exportierende Zeile aus If j = "" Then Exit Sub If j <= 3 Then Exit Sub For t = 1 To ActiveWorkbook.Worksheets(1).Cells(j, Columns.Count).End(xlToLeft).Column 'für jede beschriebene Spalte Tabelle19Zeile n UserForm1.ListBox1.AddItem (Tabelle19.Cells(3, t)) UserForm1.ListBox1.List(a, 0) = Tabelle19.Cells(3, t) UserForm1.ListBox1.List(a, 1) = Tabelle19.Cells(j, t) a = a + 1 Next t End Sub Private Sub CommandButton1_Click() ' " > " - Button Dim a As Integer ListBox2.Clear 'um Doppeleinträge zu vermeiden For a = 0 To UserForm1.ListBox1.ListCount - 1 'für jede Zeile der Listbox1 If UserForm1.ListBox1.Selected(a) Then 'Wenn markiert dann UserForm1.ListBox2.AddItem UserForm1.ListBox1.List(a, 0) & vbTab & UserForm1.ListBox1.List(a, 1) ' UserForm1.ListBox2.List(a, 0) = (UserForm1.ListBox1.List(a, 0)) ' UserForm1.ListBox2.List(a, 1) = (UserForm1.ListBox1.List(a, 1)) End If Next a End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 22. Aug. 2006 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
ohne mir jetzt den Rest näher anzuschauen (es wird übrigens Zeit, die Mappe zu uppen, keine Lust mehr auf Copy&Paste...) tippe ich mal auf den gleichen Fehler wie gestern: wenn denn nur das Fettgedruckte Probleme macht: die Syntax nach dem = ist falsch. Versuch mal ohne diese schäbigen Klammern. war's das? ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 22. Aug. 2006 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für jonnyw79
versuch mal dieses: Code: Private Sub CommandButton1_Click() Dim i As Integer, a As Integer ListBox2.Clear 'um Doppeleinträge zu vermeiden a = 0 For i = 0 To UserForm1.ListBox1.ListCount - 1 'für jede Zeile der Listbox1 If UserForm1.ListBox1.Selected(i) Then 'Wenn markiert dann ListBox2.AddItem (UserForm1.ListBox1.List(i, 0)) 'markierten Eintrag der Listbox1 zu Listbox2 hinzufügen ListBox2.List(a, 1) = UserForm1.ListBox1.List(i, 1) ' das gleiche mit der zweiten Spalte a = a + 1 End If Next End Sub
------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jonnyw79 Mitglied Student
Beiträge: 67 Registriert: 18.11.2005
|
erstellt am: 22. Aug. 2006 14:28 <-- editieren / zitieren --> Unities abgeben:
Hallo! Hier mein Feedback!!! Dein letzter Programmcode funktioniert prächtig! Hatte schon ähnliches probiert, allerdings erfolglos! Lag allerdings nicht an den Klammern, es klappt nämlich auch mit Klammern. Der Hund war wohl irgendwo in der Schleife begraben. Egal jetzt klappts ja. Tausend DANK!!!! Gruss Jens Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |