Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1160to1164
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox anpassen / Werte übernehmen

Listbox anpassen / Werte übernehmen
Rainer
Hallo,
habe mir mal wieder eine UserForm abändern wollen und bekomme nicht alles angepasst.
Den nachstehenden Code würde ich gerne so ändern, dass in der Listbox nur Spalte F und G ab Zeile 10 gelistet werden. Mit meinem bescheidenen VBA-Kenntnissen komme ich da leider nicht weiter.
Private Sub UserForm_Initialize()
Dim arr As Variant
Dim arrF() As Variant
Dim i As Long
Dim k As Long
Dim m As Long
arr = Range("A1", Cells.SpecialCells(xlCellTypeLastCell))
ReDim arrF(1 To UBound(arr, 2), 1 To 1)
For i = 1 To UBound(arr)
If arr(i, 10) = "x" Then
m = m + 1
For k = 1 To UBound(arr, 2)
ReDim Preserve arrF(1 To UBound(arr, 2), 1 To m)
arrF(k, m) = arr(i, k)
Next
End If
Next
If Not IsEmpty(arrF) Then
Listbox1.ColumnCount = UBound(arrF)
Listbox1.Column = arrF
End If
End Sub
Die dann ausgewählten Themen sollten dann in Spalte K markiert werden.
https://www.herber.de/bbs/user/69887.xls
Wollte mir den Drucken-Button ändern aber ...
Für Eure Hilfe vorab vielen Dank.
Gruß Rainer
AW: Listbox anpassen / Werte übernehmen
04.06.2010 09:20:30
Oberschlumpf
Hi Rainer
Meinst du so:
https://www.herber.de/bbs/user/69888.xls
Wenn du nun auf den Button "Auswahlfenster" klickst, wird die 2-spaltige Listbox mit den Werten aus Spalte F + G gefüllt.
Wenn du dann einige Einträge auswählst und dann auf den Button "Übernehmen" klickst, erscheint in der Spalte, in der jeweiligen Zeile der Eintrag "ausgewählt".
Was du mit dem Drucker-button vorhast, weiß ich nicht, da weder ein Drucker-Button vorhanden, noch deine Vorstellung, was genau passieren soll, ebenso nicht vorhanden ist.
Hilfts denn schon mal?
Ciao
Thorsten
Anzeige
AW: Listbox anpassen / Werte übernehmen
04.06.2010 09:41:03
Rainer
Hallo Thorsten,
vielen Dank für Deine Mithilfe.
Der Drucker-Button resultiert aus der Originaldatei und wird hier nicht benötigt.
Deshalb hatte ich den Button, aber noch nicht den Code entfernt.
In der ListBox sollen nur die Themen gelistet werden, welche in Spalte J ein "x" haben.
Dann ist schon alles perfekt.
Gruß Rainer
AW: Listbox anpassen / Werte übernehmen
04.06.2010 09:48:18
Oberschlumpf
Hi Rainer
OK, das mit dem "x" in Spalte J hatte ich im alten Code überlesen.
Lösch mal den Code im Initialize-Ereignis des Userforms und setz diesen ein:
Private Sub UserForm_Initialize()
Dim liRow As Integer
Range("K10" & ":K" & Cells(Rows.Count, 11).End(xlUp).Row).Value = ""
For liRow = 10 To Cells(Rows.Count, 6).End(xlUp).Row
If Range("J" & liRow).Value  "" Then
Listbox1.AddItem Range("F" & liRow).Value
Listbox1.List(Listbox1.ListCount - 1, 1) = Range("G" & liRow).Value
End If
Next
End Sub

Nun sollte das passieren, was du erreichen möchtest.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Listbox anpassen / Werte übernehmen
04.06.2010 10:03:48
Rainer
Hallo Thorsten,
danke, genau so hatte ich es gewünscht.
Wenn ich noch eine Kleinigkeit nachfragen dürfte.
Wollte mir eine zweite UserForm (mit Intern-Spalte) machen.
Ändere ich jedoch im Code
Listbox1.List(Listbox1.ListCount - 1, 1) = Range("G" & liRow).Value

das G in H ab, wird mir nur Spalte F und H angezeigt.
Könntest Du mir noch kurz die zu ändernden Angaben zur Anzeige F-H mitteilen?
Danke
Rainer
AW: Listbox anpassen / Werte übernehmen
04.06.2010 10:24:17
fcs
Hallo Rainer,
ich hatte mich auch schon mit deinem Problem beschäffigt.
Nachfolgend mein Vorschlag für den Userformcode. Da nicht alle Zeilen des Bereichs eingelesen werden, hab ich zusätzlich die Zeilennummern in einer unsichtbaren Spalte mit eingelesen, um dann beim Übernehmen die "x"in die korrekten Zeilen eintragen zu können.
Für weitere/andere Spalten muss du entsprechende Zeilen ergänzen
.List(.ListCount - 1, 3) = wks.Cells(lRow, 8).Text 'Spalte H
Zusätzlich müssen die Eigenschaften ColumnCount und ColumnWidths angepasst werden.
Gruß
Franz
Option Explicit
Private wks As Worksheet
Private Sub CmdAbbrechen_Click()
'Button Schliessen
Unload Me
End Sub
Private Sub CommandButton1_Click()
'Button übernehmen - "x" in SPlate K eintragen
Dim iIndex As Long
With Me.Listbox1
For iIndex = 0 To .ListCount - 1
If .Selected(iIndex) = True Then
wks.Cells(CLng(.List(iIndex, 0)), 11) = "x"
Else
wks.Cells(CLng(.List(iIndex, 0)), 11).ClearContents
End If
Next
End With
End Sub
Private Sub UserForm_Initialize()
Dim lRow As Long
'Bereich mit Auswahldaten setzen F10:Gxxx
Set wks = ActiveSheet
With Me.Listbox1
.ColumnCount = 3
.ColumnWidths = "0Pt;60Pt;100Pt"
'Daten der Listbox zuweisen
For lRow = 10 To wks.Cells(wks.Columns.Count, 6).End(xlUp).Row
If LCase(wks.Cells(lRow, 10)) = "x" Then '"x" in Spalte J
.AddItem lRow                                  'Zeilennummer
.List(.ListCount - 1, 1) = wks.Cells(lRow, 6).Text 'Spalte G
.List(.ListCount - 1, 2) = wks.Cells(lRow, 7).Text 'Spalte H
If LCase(wks.Cells(lRow, 11)) = "x" Then
.Selected(.ListCount - 1) = True
End If
Else
wks.Cells(lRow, 11).ClearContents
End If
Next
End With
End Sub

Anzeige
AW: Listbox anpassen / Werte übernehmen
04.06.2010 12:38:18
Rainer
Hallo,
habe meine Tabelle nun noch etwas erweitert damit ich Werte in der UserForm gleich geändert bekomme.
Mit dem Doppelklickereignis klappt das >>

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With UserForm1
.Label2.Caption = "Thema: " & Listbox1.List(Me.Listbox1.ListIndex, 1)
.TextBox1.Value = Listbox1.List(Me.Listbox1.ListIndex, 4)
.TextBox2.Value = Listbox1.List(Me.Listbox1.ListIndex, 5)
End With
End Sub

Nun würde ich dies aber gerne mit mit dem ListBox1_Click machen.
Private Sub ListBox1_Click()
...code wie oben...
End Sub
Die Werte aus Dbl-Click in () werden nicht aktzeptiert.
Was fehlt hier noch?
Gruß Rainer
Anzeige
hab noch keine Lösung, aber...
04.06.2010 13:13:03
Oberschlumpf
...einen Hinweis, den du bedenken solltest
Hi Rainer
Ich finde die Lösung mit 1x Klick eher unbrauchbar. Die von dir schon erreichte Doppelklicklösung macht mehr Sinn.
Begründung:
Bei 1 x Klick wird jetzt die jeweilige Zeile in der Listbox ausgewählt.
Und du hast bei weiteren 1xKlick die Möglichkeit, zusätzliche Zeilen in der Listbox auszuwählen.
Bei Doppelklick erscheint das jeweilige Thema im Label und irgdwelche Werte aus nicht sichtbaren Spalten in den Textboxen.
So weit so gut.
Wenn du nun aber eine andere Zeile der Listbox doppelklickst, sollte die vorherige Auswahl in der Listbox verschwinden.
Weil, es können nicht 2 Zeilen der Listbox markiert sein, aber nur 1x erscheint das Thema im Label.
Es kann schon, macht aber keinen Sinn...du hast nur ein Label, es sind aner zwei Zeilen markiert. Welche Werte sollen jetzt geändert werden? Das weiss Excel nicht - ich auch nich )
Und deswegen würde das auch mit 1xKlick (so wie du es möchtest) nicht funktionieren.
Bei 1xKlick SOLL es möglich sein, mehrere Einträge auswählen zu können.
Aber bei Mehrfachauswahl kann dann nicht das Label und die Textboxen befüllt werden.
Es ist zumindest nicht plausibel.
So...viel Text...hoffe, du hast verstanden, was ich meine :-)
Ciao
Thorsten
Anzeige
AW: hab noch keine Lösung, aber...
04.06.2010 13:50:51
Rainer
Hallo Thorsten,
ups, habe gerade bermerkt, was dass ich den Experten so natürlich verwirre.
Da mit Doppelklick das Label unterhalb der Listbox entsprechend geändert wurde bin ich davon ausgegangen, dass auch die Textboxen mit dem jeweiligen Click auf ändern in der richtigen Zeile zurück geschrieben werden.
FEHLANZEIGE !!!
Die UserForm soll die Beantwortung des als Fragebogen aufgebauten ExcelSheets ermöglichen.
Spalte K ist mein ja/nein-Feld.
In Spalte L und M sollen weitere Informationen erfasst werden.
Problem nun, wie Du erkannt hast:
Mir schreibt es den zuletzt eingegebenen Wert der Textboxen in jedes markierte Feld.
Schande, muss ich wohl komplett umdenken.
Vielen Dank für die bisherige Hilfe.
Gruß Rainer
Anzeige
AW: hab noch keine Lösung, aber...
04.06.2010 18:24:12
Rainer
Hallo,
so, nun habe ich einen anderen Ansatz gewählt.
Im Grunde habe ich die Lösung. Lediglich bei der Auswahl werden mir die falschen Felder übernommen.
Habe schon etliches (Wert ab Spalte A vs. Wert ab Spalte F) getestet. Jedesmal nicht der gewünscht Wert im Option-Button bzw. der CheckBox.
Was muss hier stehen, damit auch beim Click auf das Thema der korrekte Wert übernommen wird?
Private Sub Listbox1_Click()
With UserForm1
.Label2.Caption = "" & Listbox1.List(Me.Listbox1.ListIndex, 1)
.OptionButton1.Value = Listbox1.List(Me.Listbox1.ListIndex, 6)
.CheckBox1.Value = Listbox1.List(Me.Listbox1.ListIndex, 7)
.TextBox1.Value = Listbox1.List(Me.Listbox1.ListIndex, 8)
.TextBox2.Value = Listbox1.List(Me.Listbox1.ListIndex, 9)
End With
End Sub
Der neue Ansatz nun so: https://www.herber.de/bbs/user/69900.xls
Gruß Rainer
Anzeige
AW: hab noch keine Lösung, aber...
04.06.2010 18:47:46
Rainer
Hallo,
bin selbst drauf gekommen.
Schätze mal, wenn beim öffnen der UserForm nur 3 (4) Spalten initialisiert werden kann das System wohl kaum 9 Spalten erkennen.
Habe also aufgrund Eurer Mithilfe das Problem lösen können.
Vielen Dank und schönen Feierabend.
Gruß Rainer
AW: Listbox anpassen / Werte übernehmen
05.06.2010 18:01:12
Rainer
Hallo Franz,
habe mit dem umgeschriebenen Code das Problem, dass er in die ListBox nicht alle Fragen übernimmt.
Ab der Zeile 250 ist Ende.
Sind keine 250 Themen, aber bedingt durch Zwischenspalten eben größer 250 Zeilen.
Kann das sein, dass Excel da nicht mehr weiter kommt?
Gruß Rainer
Anzeige
AW: Listbox anpassen / Werte übernehmen
04.06.2010 10:24:38
Oberschlumpf
Hi Rainer
Wenn du mit "intern" nur eine einspaltige Listbox haben willst, dann so:
lösch im neuen Code diese Zeile komplett
Listbox1.List(Listbox1.ListCount - 1, 1) = Range("G" & liRow).Value
und erstz diese Zeile
Listbox1.AddItem Range("F" & liRow).Value
durch diese
Listbox1.AddItem Range("H" & liRow).Value
Was du mit
...habe gerade noch festgestellt, dass nun mit der Initialisierung der Spalte J der CommandButton1 auch noch entsprechend anzupassen ist....
meinst, verstehe ich leider nicht.
Ciao
Thorsten
AW: Listbox anpassen / Werte übernehmen
04.06.2010 10:31:53
fcs
Hallo Thorsten,
Was du mit
...habe gerade noch festgestellt, dass nun mit der Initialisierung der Spalte J der CommandButton1 auch noch entsprechend anzupassen ist....
meinst, verstehe ich leider nicht.

Da nicht alle Zeilen in die Listbox eingelesen werden, kann man beim Übernehmen der ausgewählten Einträge nicht mit mit liIndex + 10 die Zeile bestimmen, in die die Markierung eingetragen wird. Man muss beim Initialisieren in die Listbox in einer weiteren Spalte auch noch die ZeilenNummer der in Spalte J markierten Einträge einlesen, so dass man diese für's Übernehmen zur Verfügung hat.
Gruß
Franz
Anzeige
AW: Listbox anpassen / Werte übernehmen
04.06.2010 10:16:27
Rainer
Hallo Thorsten,
habe gerade noch festgestellt, dass nun mit der Initialisierung der Spalte J der CommandButton1 auch noch entsprechend anzupassen ist.
Vielleicht kannst Du mir da auch nochmal helfen?
Gruß Rainer
@Franz @Rainer
04.06.2010 10:50:35
Oberschlumpf
Hi Franz
Danke für die "Übersetzung" :-)
Nun versteh auch ich, was gemeint und noch falsch war.
Hi Rainer
Ersetz den Code im Command-Button durch diesen Code:
Private Sub CommandButton1_Click()
Dim liIndex As Integer, liRow As Integer
For liIndex = 0 To Listbox1.ListCount - 1
If Listbox1.Selected(liIndex) = True Then
For liRow = 10 To Cells(Rows.Count, 6).End(xlUp).Row
If Listbox1.List(liIndex, 0) = Range("F" & liRow).Value Then
Range("K" & liRow).Value = "ausgewählt"
End If
Next
Else
For liRow = 10 To Cells(Rows.Count, 6).End(xlUp).Row
If Listbox1.List(liIndex, 0) = Range("F" & liRow).Value Then
Range("K" & liRow).Value = ""
End If
Next
End If
Next
End Sub

Hilfts?
Wenn nich, versuch mal Franz' Idee. Er hatte vllt von Anfang an besser gelesen + verstanden.
Ciao
Thorsten
AW: @Franz @Rainer
04.06.2010 18:50:00
Rainer
Irgenwie komme ich mit der Reihenfolge hier nicht zurecht, deshalb nochmal in der Hoffnung, dass es nun auch am Ende steht:
Hallo,
bin selbst drauf gekommen.
Schätze mal, wenn beim öffnen der UserForm nur 3 (4) Spalten initialisiert werden kann das System wohl kaum 9 Spalten erkennen.
Habe also aufgrund Eurer Mithilfe das Problem lösen können.
Vielen Dank und schönen Feierabend.
Gruß Rainer
AW: @Franz @Rainer
07.06.2010 12:04:43
Rainer
Hallo,
wie mir scheint schafft Ecxel im Sub UserForm_Initialize() maximal 257 Zeilen.
Dennoch vielen Dank. Der Code funktioniert sonst einwandfrei.
Gruß Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige