Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
780to784
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
780to784
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Daten in Userform einlesen verbessern
07.07.2006 12:05:20
Heinz
Hallo zusammen,
ich lese aus einer Datei eine Liste mit Datumsangaben in eine Userform.
In der Userform soll dann in 2 Listboxen jeweils ein Datum ausgewählt werden.
In der Listbox 2 muss das Datum später liegen als in Listbox 1.
Soweit funzt das auch.
Allerdings wird die Datei mittlerweile lang und länger und es existieren auch mehrere Einträge mit dem gleichen Datum. Das ist eine ewige scrollerei.
Ich möchte nun gerne in der Listbox 1 das das aktuelle Datum als Position hinterlegt ist. So muss nicht ewig gescrollt werden. In der Listbox 2 soll dann nach Auswahl des benötigten Datums in Listbox1 das gleiche Datum erscheinen um auch hier nicht ewig scrollen zu müssen.
Weiterhin soll jedes Datum nur einmal in den Listboxen erscheinen.
Die initialisierung habe ich folgendermaßen gelöst:

Private Sub UserForm_Initialize()
Dim LA%   'Anfangsdatum
Dim LE%   'Endedatum
LA = Worksheets("Erfassung").Cells(Rows.Count, 1).End(xlUp).Row
ListBox1.RowSource = "Erfassung!A8:a" & LA
ListBox1.ListIndex = 0
LE = Worksheets("Erfassung").Cells(Rows.Count, 1).End(xlUp).Row
ListBox2.RowSource = "Erfassung!A8:a" & LE
ListBox2.ListIndex = 0
End Sub

Verarbeitet werden dann die gewonnenen Daten folgendermaßen:

Private Sub cmdOK_Click()
'Datum übernehmen und nicht benötigte Bereiche ausblenden
Dim LA As Date
Dim LE As Date
Dim a%
Dim b%
For a = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(a) = True Then
LA = ListBox1.List(a, 0)
Application.ScreenUpdating = False
Worksheets("Erfassung").Range("n1") = LA  'Anfangsdatum ablegen
Application.ScreenUpdating = True
End If
Next a
For b = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(b) = True Then
LE = ListBox2.List(b, 0)
Application.ScreenUpdating = False
Worksheets("Erfassung").Range("n2") = LE  'Endedatum ablegen
Application.ScreenUpdating = True
End If
Next b
Sort_1                'Sortieren
drucken1
Sort_ursprung         'Ursprungsreihenfolge wiederherstellen
Unload Me
End
End Sub

Wie kann ich das gewünscht bewerkstelligen, hab da keinen Plan.
Danke schon mal im Voraus für die Mühe.
Gruß Heinz

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in Userform einlesen verbessern
08.07.2006 03:31:54
fcs
Hallo Heinz,
habe mal ein wenig in meiner Schatzkiste gegraben und das Ganze angepaßt.
hier eine kleine Beispieldatei: https://www.herber.de/bbs/user/34934.xls
mfg
Franz
Private Liste() As Date
Private Sub cmdAbbrechen_Click()
Me.Hide
End Sub
Private Sub ListBox1_Change()
'Bei Änderung der Auswahl in Listbox1 wird die Listbox2 auf den gleichen Wert gesetzt
On Error Resume Next
ListBox2.ListIndex = ListBox1.ListIndex
End Sub
Private Sub ListBox2_Change()
On Error GoTo weiter
If CDate(ListBox2.Value) < CDate(ListBox1.Value) Then
MsgBox "Datum in dieser Listbox muß neuer sein als in Listbox1!!"
End If
weiter:
End Sub
Private Sub UserForm_Initialize()
Dim LA%   'Anfangsdatum
Dim LE%   'Endedatum
Dim I
'AuswahlDaten Listbox1 einlesen
LA = Worksheets("Erfassung").Cells(Rows.Count, 1).End(xlUp).Row
Call ListeErstellen(Sheets("Erfassung").Range("A8:A" & LA))
ListBox1.List = Liste()
'Auswahl für Listbox1 auf aktuelles Datum setzen
For I = 0 To ListBox1.ListCount - 1
If CDate(ListBox1.List(I)) <= Date Then ListBox1.ListIndex = I
If CDate(ListBox1.List(I)) > Date Then Exit For
Next I
'Auswahl-Daten Listbox2 einlesen
'    LE = Worksheets("Erfassung").Cells(Rows.Count, 1).End(xlUp).Row
'    Call ListeErstellen(Sheets("Erfassung").Range("A8:a" & LE))
ListBox2.List = Liste()
ReDim Liste(0)
'Auswahl in den beiden Boxen gleichsetzen
ListBox2.ListIndex = ListBox1.ListIndex
End Sub
Private Sub ListeErstellen(Bereich As Range)
'Schreibt Daten aus einspaltigem Bereich in ein Feld, entfernt doppelte Eintrage und sortiert die Liste
Dim Zelle As Range, Zeile As Long, I As Long, J As Long, x As Long, Hilfsarray() As Date
If Bereich.Columns.Count <> 1 Then
MsgBox ("Bereich darf nur eine Spalte haben!!!")
ReDim Liste(0)
Liste(0) = 1
Exit Sub
End If
'Daten aus Bereich einlesen
ReDim Liste(0 To Bereich.Rows.Count - 1)
Zeile = 0
For Each Zelle In Bereich
Liste(Zeile) = Zelle.Value
Zeile = Zeile + 1
Next Zelle
'Doppelte Einträge auf 0 setzen
For I = 0 To UBound(Liste)
For J = I + 1 To UBound(Liste)
If Liste(J) = Liste(I) Then
Liste(J) = 0
End If
Next J
Next I
'Einträge mit Wert 0 ans Listenende setzen
For I = 0 To UBound(Liste)
If Liste(I) = 0 Then
J = I
Do Until Liste(J) <> 0
If J = UBound(Liste) Then Exit Do
J = J + 1
Loop
Liste(I) = Liste(J)
Liste(J) = 0
End If
Next I
'Feld redimensionieren, um 0-Werte abzuschneiden
For I = 0 To UBound(Liste)
If Liste(I) = 0 Then
ReDim Preserve Liste(0 To I - 1)
Exit For
End If
Next
'Liste sortieren
ReDim Hilfsarray(UBound(Liste))
For I = 0 To UBound(Liste)
x = 0
For J = 0 To UBound(Liste)
If Liste(I) > Liste(J) Then
x = x + 1
End If
Next J
If Hilfsarray(x) = 0 Then
Hilfsarray(x) = Liste(I)
Else
Hilfsarray(x + 1) = Liste(I)
End If
Next I
For I = 0 To UBound(Liste)
Liste(I) = Hilfsarray(I)
Next I
ReDim Hilfsarray(0)
End Sub
Private Sub cmdOK_Click()
'Datum übernehmen und nicht benötigte Bereiche ausblenden
Sheets("Erfassung").Range("n1") = CDate(ListBox1.Value)  'Anfangsdatum ablegen
Sheets("Erfassung").Range("n2") = CDate(ListBox2.Value)  'Endedatum ablegen
Sort_1                'Sortieren
drucken1
Sort_ursprung         'Ursprungsreihenfolge wiederherstellen
Unload Me
End
End Sub

Anzeige
AW: Daten in Userform einlesen verbessern
10.07.2006 18:47:13
Heinz
Hallo Franz,
Sorry das ich erst jetzt antworte.
Das Makro ist genau das was ich wollte.
Super Job. Danke Dir.
Gruß Heinz

228 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige