Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1260to1264
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
UF Listbox o. leere Zeilen wenn Wert in Sp B
Dietmar
Hallo in die Abendrunde,
komme nicht weiter, weil ich kein geeignetes Beispiel finden kann und keine Idee habe, wie ich die UF-Idee umsetzen kann.
Ich möchte in einer Userform eine Listbox abbilden, die folgende Umstände berücksichtigt:
* abzubilden sind drei Datenbereiche mit je 4 Spalten; beginnend mit Zeile 10, endend bei Zeile 250
* in der UF soll eine 4-Spaltige Listbox dargestellt werden, die die drei Datenbereich untereinander abbildet
* ... WENN in der jeweils 2. Spalte der Datenbereiche der Wert ungleich 0 bzw. ungleich "" ist.
* In der Listbox sollen keine Leerzeilen erscheinen
Und dann das Sahnhäubchen:
* Wenn der Wert der 2 Spalte kleiner 0 ist soll die Minuszahl rot dargestellt werden (falls das überhaupt geht)
Hier mal meine Beispieldatei:
https://www.herber.de/bbs/user/80002.xls
Herzlichen Dank vorab!
Dietmar aus Aachen

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: UF Listbox o. leere Zeilen wenn Wert in Sp B
01.05.2012 02:43:52
fcs
Hallo Dietmar,
hier dein Userform-Code zum füllen der Liste aus drei Bereichen.
Gruß
Franz
Option Explicit
Private arrListe(), lngIndex As Long
Private Sub cmd_Schließen_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim wks As Worksheet
Set wks = Worksheets("Tabelle1")
lngIndex = 0
Erase arrListe
With wks
'1. Bereich
Call ListeFuellen(rngBereich:=.Range(.Cells(10, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset( _
0, 3)))
'    Call ListeFuellen(rngBereich:=.Range(.Cells(10, 1), .Cells(250, 4)))
'2. Bereich
Call ListeFuellen(rngBereich:=.Range(.Cells(10, 6), .Cells(.Rows.Count, 6).End(xlUp).Offset( _
0, 3)))
'3. Bereich
Call ListeFuellen(rngBereich:=.Range(.Cells(10, 11), .Cells(.Rows.Count, 11).End(xlUp). _
Offset(0, 3)))
End With
With Me.ListBox1
.ColumnCount = 4
.Font.Size = 11
.ColumnWidths = "150pt;60pt;100pt;100pt"
.List = Application.WorksheetFunction.Transpose(arrListe)
End With
Erase arrListe
End Sub
Sub ListeFuellen(rngBereich As Range)
Dim Zeile As Long, Spalte As Long
For Zeile = 1 To rngBereich.Rows.Count
If rngBereich.Cells(Zeile, 2) = 0 Or rngBereich.Cells(Zeile, 2) = "" Then
Else
lngIndex = lngIndex + 1
ReDim Preserve arrListe(1 To 4, 1 To lngIndex)
For Spalte = 1 To 4
arrListe(Spalte, lngIndex) = rngBereich.Cells(Zeile, Spalte)
Next
End If
Next
End Sub

Anzeige
grandios, DANKE
01.05.2012 16:53:20
Dietmar
Hallo Franz,
ich bin restlos begeistert. Funktioniert einwandfrei!
Werde mich mit dem Code mal näher auseinandersetzen. Ich habe hier in dem Forum zwar schon viel gelernt, aber mein Aktiv-Know-How reicht leider für solche Aufgaben bei weitem noch nicht aus.
Deshalb nochmals ganz herlichen Dank, dass Du Dir die Mühe gemacht hast und mir eine fertig Lösung präsentierst, die ich in mein Projekts übernehmen kann.
Es ist immer ein schönes Gefühl, wenn ich eine Idee habe, dann stundenlang recherchiere und probiere und dann schlussendlich doch hier im Forum nachfrage und ... dann prompt solche tolle Lösungen bekomme!
Ich weiß ja nicht welche Rolle du hier im Forum spielst, aber es ist ja auch von Dir nicht der 1. Tolle Tipp für mich. Grüß die Mannschaft mal von mir. Tolle Truppe :-)
Ich wünsche Dir noch einen schönen 1. Mai
Viele Grüße
Dietmar
Anzeige
... noch Korrekturbedarf
01.05.2012 21:58:48
Dietmar
Hallo Frank,
es gibt doch noch etwas Korrekturbedarf, weil ich Deinen Code nun in eines meiner Projekte eingebaut und dementsprechend angepasst habe. (Code siehe unten).
Vorab: Die Prüfung ob die Listbox etwas anzeigen soll habe ich nun in Spalte 3 gelegt. In diesem Projekt soll auch
nur ein Bereich und nicht drei Bereiche geprüft werden (A200 : F 400) . Dort befinden sich Bezüge aus verschiedenen Sheets. Dieser Bereich ist ausgeblendet und liegt ausserhalb der Sroll-Area, (dürfte aber wohl unerheblich sein)
Also folgendes passiert:
1) Wenn nur ein Produkt in Spalte 3 gebucht wurde, werden alle Werte in die Spalte 1 der Listbox transponiert und nicht auf die Spalten verteilt
2) Wenn überhaupt kein Produkt gebucht wurde, entsteht ein Laufzeitfehler 5 (ungültiger Prozeduraufruf oder ungültiges Argument. Der Code hängte sich dann aber bei dem Schritt *.List = Application.WorksheetFunction.Transpose(arrListe)* auf. Habe schon versucht ein *Unload Me* einzubauen, läuft trotzdem nicht durch.
3) Meine Tüftelei hatte leider wieder keinen Erfolg: Wie kann ich erreichen, dass die Werte in Spalte 4 und 5 in der Listbox als 2-stellige Dezimalzahl mit EURO-Zeichen angezeigt werden?
Erneut besten Dank vorab und
viele Grüße
Dietmar
Option Explicit
Private arrListe(), lngIndex As Long
Private Sub cmd_Schließen_UF_Produkte_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim wks As Worksheet
Set wks = Worksheets("Verkauf_")
lngIndex = 0
Erase arrListe
With wks
'NUR noch ein Bereich:
Call ListeFuellen(rngBereich:=.Range(.Cells(200, 1), .Cells(400, 5)))
End With
With Me.ListBox1
.ColumnCount = 6
.Font.Size = 10
.ColumnWidths = "170pt;60pt;65pt;80pt;100pt;80pt"
.List = Application.WorksheetFunction.Transpose(arrListe)     '

Anzeige
Listbox-Auswahlliste füllen - Korrektur
01.05.2012 23:12:56
fcs
Hallo Dietmar,
zu 1.) nur 1 Eintrag in Liste, Darstellung in 1 Spalte
Dieses Phänomen tritt leider auf. Gleiche Frage gab es hier gestern auch schon. Lösung über AddItem-Methode
zu 2.) keine Einträge gefunden
Dann ist das Array, das die Listbox füllen soll, noch darnicht dimensioniert - da gib es den VBA-GAU. Über Prüfung des Arrray-Zählers lngIndex auf Werte 0, 1 und sonstige kann man das Problem umschiffen.
zu 3.) Währungsformat in Listbox
Hier muss beim Einlesen die Spalte auf 4 oder 5 geprüft werden und dann entweder die Text-Eigenschaft eingelesen werden oder der Zellinhalt entsprechend formatiert in die Liste geschrieben werden.
Gruß
Franz
Option Explicit
Private arrListe(), lngIndex As Long
Private Sub cmd_Schließen_UF_Produkte_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim wks As Worksheet
Dim Spalte As Integer
Set wks = Worksheets("Verkauf_")
lngIndex = 0
Erase arrListe
With wks
'NUR noch ein Bereich:
Call ListeFuellen(rngBereich:=.Range(.Cells(200, 1), .Cells(400, 5)))
End With
With Me.ListBox1
.ColumnCount = 6
.Font.Size = 10
.ColumnWidths = "170pt;60pt;65pt;80pt;100pt;80pt"
.Clear
Select Case lngIndex
Case 0
'do nothing
MsgBox "Keine Einträge für Listbox gefunden", vbInformation + vbOKCancel, "Listbox fü _
llen"
Case 1
.AddItem arrListe(1, 1)
For Spalte = 1 To 5
.List(0, Spalte) = arrListe(Spalte + 1, 1)
Next
Case Else
.List = Application.WorksheetFunction.Transpose(arrListe)
End Select
End With
Erase arrListe
End Sub
Sub ListeFuellen(rngBereich As Range)
Dim Zeile As Long, Spalte As Long
For Zeile = 1 To rngBereich.Rows.Count
If rngBereich.Cells(Zeile, 3) = 0 Or rngBereich.Cells(Zeile, 3) = "" Then
Else
lngIndex = lngIndex + 1
ReDim Preserve arrListe(1 To 6, 1 To lngIndex)
For Spalte = 1 To 6
Select Case Spalte
Case 4, 5
'arrListe(Spalte, lngIndex) = rngBereich.Cells(Zeile, Spalte).Text 'Anzeige wie in  _
Tabelle formatiert
arrListe(Spalte, lngIndex) = Format(rngBereich.Cells(Zeile, Spalte), "#,##0.00 €")
Case Else
arrListe(Spalte, lngIndex) = rngBereich.Cells(Zeile, Spalte)
End Select
Next
End If
Next
End Sub

Anzeige
Perfekt!
01.05.2012 23:50:20
Dietmar
Hallo Frank,
absolut perfekt!
Kleinigkeit, die mir aber nicht wirklich wichtig ist:
Wenn keine Daten für die Listbox vorhanden sind, erscheint folgerichtig die Msgbox, allerdings danach auch die leere Userform.
So, jetzt ist genug. Gute Nacht!
und nochmals herzlichen Dank für die tolle Unterstützung!!
Viele Grüße und eine schöne Restwoche
Dietmar
Perfekt!
01.05.2012 23:51:29
Dietmar
Hallo Frank,
absolut perfekt!
Kleinigkeit, die mir aber nicht wirklich wichtig ist:
Wenn keine Daten für die Listbox vorhanden sind, erscheint folgerichtig die Msgbox, allerdings danach auch die leere Userform.
So, jetzt ist genug. Gute Nacht!
und nochmals herzlichen Dank für die tolle Unterstützung!!
Viele Grüße und eine schöne Restwoche
Dietmar
Anzeige
Perfekt!
01.05.2012 23:51:56
Dietmar
Hallo Frank,
absolut perfekt!
Kleinigkeit, die mir aber nicht wirklich wichtig ist.
Wenn keine Daten für die Listbox vorhanden sind, erscheint folgerichtig die Msgbox, allerdings danach auch die leere Userform.
So, jetzt ist genug. Gute Nacht!
Und nochmals herzlichen Dank für die tolle Unterstützung!!
Viele Grüße und eine schöne Restwoche
Dietmar
AW: Dummy-Item statt MsgBox
02.05.2012 11:16:40
fcs
Hallo Dietmar,
um die Anzeige des UF kommt man nicht herum.
Du kannst aber ein Dummy-Item in die Liste eintragen lassen, statt die MsgBox anzuzeigen.
Dann ist es ein Klick weniger, um das UF zu beenden.
Gruß
Franz
    Select Case lngIndex
Case 0
'do nothing
.AddItem "---------(keine Daten gefunden)-----------"
Case 1

Anzeige
Das gefällt mir ...
02.05.2012 23:16:03
Dietmar
Hallo Franz,
herzlichen Dank!
Habe die Ergänzung in Deinen Code eingebaut und es sieht gut aus :-)
So, ich denke, jetzt sind alle meine Wünsche erfüllt.
Mach's gut und bis gelegentlich.
Liebe Grüße
Dietmar

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige