Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1344to1348
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 mit Bedingungen

Listbox mit Bedingungen
07.01.2014 12:24:45
Werner
Hallo Experten,
bräuchte Hilfe, da ich mit meinem Problem nicht weiter komme.
Ich habe ein Workbook mit den Tabellenblättern "Dateneingabe", "Verbot" und "Zustellung".
Bei Klick auf die Schaltfläche "Zustellen/Löschen" öffnet sich die Userform "Postbote" mit _
einer mehrspaltigen Listbox. Die Listbox wird mit folgendem Code gefüllt:

Private Sub UserForm_Activate()
Dim X As Long
Dim i As Integer
Dim sText As String
Application.ScreenUpdating = False
Worksheets("Zustellung").Activate
TextBox1.SetFocus
Me.Namen.Clear
Postbote.Anlegen.ForeColor = RGB(0, 100, 0)
Postbote.Löschen.ForeColor = RGB(255, 0, 0)
X = Range("D" & Rows.Count).End(xlUp).Row
For i = 5 To X
With Worksheets("Zustellung")
sText = .Cells(i, 4).Value & .Cells(i, 5).Value & .Cells(i, 6).Value & .Cells(i, 7).Value
End With
Me.Namen.AddItem
Namen.List(Namen.ListCount - 1, 0) = Cells(i, 4)
Namen.List(Namen.ListCount - 1, 1) = Cells(i, 5)
Namen.List(Namen.ListCount - 1, 2) = Cells(i, 6)
Namen.List(Namen.ListCount - 1, 3) = Cells(i, 7)
Namen.List(Namen.ListCount - 1, 4) = i
Next i
Worksheets("Dateneingabe").Select
Application.ScreenUpdating = True
End Sub

Bei Klick auf die Schaltfläche "Schriftstück zustellen" frage ich die Auswahl der Listbox mit _
folgendem Code ab:

Private Sub Anlegen_Click()
Dim j As Integer
Dim lngZaehler As Long
Dim lngLetzte As Long
Dim lngZeile As Long
Dim ZielZeile As Variant
Dim blnVorhanden As Boolean
If Namen.ListIndex = -1 Then
MsgBox "Bitte in der Liste eine Auswahl treffen.", 48, "  Hinweis für " & Application. _
UserName
TextBox1.SetFocus
Exit Sub
End If
With Worksheets("Zustellung")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
End With
With Namen
For j = 0 To .ListCount - 1
If .Selected(j) Then
For lngZeile = 1 To lngLetzte
If Sheets("Zustellung").Cells(lngZeile, 4) = .List(j, 0) And _
Sheets("Zustellung").Cells(lngZeile, 5) = .List(j, 1) _
And Sheets("Zustellung").Cells(lngZeile, 6) = .List(j, 2) Then
blnVorhanden = False
Exit For
End If
Next lngZeile
If blnVorhanden = False Then
Papier_zustellen.Show
Exit Sub
End If
blnVorhanden = True
End If
Next
End With
End Sub

Hierbei wird die Userform "Papier_zustellen" geöffnet und die Daten aus der Listbox werden eingelesen. Das klappt auch so.
Was ich jetzt noch möchte ist, dass geprüft wird, ob die in der Listbox ausgewählte Person im Tabellenblatt "Verbot" schon angelegt ist (gleicher Familienname, gleicher Vorname, gleiches Geburtsdatum).
Trifft dies zu und beim Schriftstück das in der Listbox gewählt wurde handelt es sich um "Verbot" oder "Verlängerung Verbot" dann soll nicht die Userform "Papier_zustellen" geöffnet werden sondern die Userform "Verlängerung".
Kriege es einfach nicht hin.
Eine Musterdatei habe ich hochgeladen.
https://www.herber.de/bbs/user/88705.xlsm
Danke für die Hilfe
Werner

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit Bedingungen
07.01.2014 13:25:51
Rudi
Hallo,
Private Sub Anlegen_Click()
Dim j As Integer
Dim lngZaehler As Long
Dim lngLetzte As Long
Dim lngZeile As Long
Dim ZielZeile As Variant
Dim blnVorhanden As Boolean, blnVerbot As Boolean
If Namen.ListIndex = -1 Then
MsgBox "Bitte in der Liste eine Auswahl treffen.", 48, _
"  Hinweis für " & Application.UserName
TextBox1.SetFocus
Exit Sub
End If
With Worksheets("Zustellung")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
End With
With Namen
For lngZeile = 1 To lngLetzte
If Sheets("Zustellung").Cells(lngZeile, 4) = .Column(0) And _
Sheets("Zustellung").Cells(lngZeile, 5) = .Column(1) And _
Sheets("Zustellung").Cells(lngZeile, 6) = CDate(.Column(2)) Then
blnVorhanden = False
Exit For
End If
Next lngZeile
End With
With Worksheets("Verbot")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
End With
With Namen
For lngZeile = 1 To lngLetzte
If Sheets("Verbot").Cells(lngZeile, 4) = .Column(0) And _
Sheets("Verbot").Cells(lngZeile, 5) = .Column(1) And _
Sheets("Verbot").Cells(lngZeile, 6) = CDate(.Column(2)) Then
blnVerbot = True
Exit For
End If
Next lngZeile
End With
If Not blnVorhanden Then
If blnVerbot Then
Verlängerung.Show
Else
Papier_zustellen.Show
End If
End If
blnVorhanden = True
End Sub

Gruß
Rudi

Anzeige
AW: Teilerfolg bzw. gelöst
07.01.2014 16:12:51
Werner
Hallo Rudi,
danke für deine Hilfe. So wie du mir den Code geschrieben hast, war es nicht ganz das was ich wollte. Dein Code bewirkt, dass ich z.B. für Mustermann immer in die Userform "Verlängerung" komme, sobald der Herr Mustermann im Tabellenblatt "Verbot" angelegt ist. Ich wollte aber, dass dann noch geprüft wird um welches Dokument es sich bei der Listbox-Auswahl handelt.
Beispiel: Listboxauswahl Mustermann - Dokument Sonstiges
die Userform "Zustellung" wird angezeigt
Listboxauswahl Mustermann - Dokument Verbot
die Userform "Verlängerung" wird angezeigt
Listboxauswahl Mustermann - Dokument Verl. Verbot
die Userform "Verlängerung" wird angezeigt
Mit deinem Code bin ich bei Mustermann immer in der Userform "Verlängerung" gelandet, auch dann wenn es sich um ein anderes Dokument gehandelt hat welches in der Listbox gewählt wurde.
Ich habe deinen Code jetzt so ergänzt:
Private Sub Anlegen_Click()
Dim j As Integer
Dim lngZaehler As Long
Dim lngLetzte As Long
Dim lngZeile As Long
Dim ZielZeile As Variant
Dim blnVorhanden As Boolean, blnVerbot As Boolean
If Namen.ListIndex = -1 Then
MsgBox "Bitte in der Liste eine Auswahl treffen.", 48, _
"  Hinweis für " & Application.UserName
TextBox1.SetFocus
Exit Sub
End If
With Worksheets("Zustellung")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
End With
With Namen
For lngZeile = 1 To lngLetzte
If Sheets("Zustellung").Cells(lngZeile, 4) = .Column(0) And _
Sheets("Zustellung").Cells(lngZeile, 5) = .Column(1) And _
Sheets("Zustellung").Cells(lngZeile, 6) = CDate(.Column(2)) Then
blnVorhanden = False
Exit For
End If
Next lngZeile
End With
With Worksheets("Verbot")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 4)), _
.Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
End With
With Namen
For lngZeile = 1 To lngLetzte
If Sheets("Verbot").Cells(lngZeile, 4) = .Column(0) And _
Sheets("Verbot").Cells(lngZeile, 5) = .Column(1) And _
Sheets("Verbot").Cells(lngZeile, 6) = CDate(.Column(2)) And _
.Column(3) Like "*Verbot" Then
blnVerbot = True
Exit For
End If
Next lngZeile
End With
If Not blnVorhanden Then
If blnVerbot Then
Verlängerung.Show
Else
Papier_zustellen.Show
End If
End If
blnVorhanden = True
End Sub
So funktioniert es jetzt.
Vielen Dank.
Gruß Werner
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige