ich hatte ein ähnliches Thema weiter unten schon einmal gestellt. Ich bin nun selbst ein wenig weiter gekommen, aber nun stecke ich fest.
Mein Problem beginnt bei 'With .lstListBox'. 'lstLIstbox' ist der Name der Listbox in der UserForm 'frmAuswahl'. Ich denke der Code danach ist klar. Dann kommt
If .ListCount = 0 Then
'... Makro beenden
End
'Ansonsten...
Else
'... erstes Listenelement markieren
.ListIndex = 0
End If
End With
Also, wenn die LIstbox leer ist, soll das Makro beendet werden, wenn nicht, soll der erste Eintrag markiert werden. Zugleich sollte dann 'lstListbox' den Wert des Tabellenblattnamens annehmen, also hier 'Tabelle1', Der Wert bleibt allerdings immer bei null, wobei es dann bei
Set objBlatt = GetWorksheet(.lstListbox.Value)
auch zu einem Fehler kommt.
Ich weiß da irgendwie nicht weiter.
Würde mich freuen, wenn mir jemand weiterhelfen könnte.
Vielen Dank.
Gruß
Steffen
Hier der Code:
Sub test
'Das Tabellenblatt "Tabelle1" öffnen
Sheets("Tabelle1").Select
'Hier werden nun die belegten Zeilen gezählt
anzahl_der_teilnehmer = WorksheetFunction.Count(Sheets("Tabelle1").Range("B4:B65000").Value)
'On Error Resume Next
'Listenfelddialog frmAuswahl aufrufen
With frmAuswahl
'Fenstertiteltext festlegen
.Caption = "Drucken"
'Eingabeaufforderungstext festlegen
.lblPrompt.Caption = "Wählen Sie etwas:"
'Listenfeld konfigurieren
With .lstListbox
'Drei Spalten anlegen
.ColumnCount = 3
'Spaltenbreiten festlegen, erste unsichtbar
.ColumnWidths = "0;-1;-1"
iloop = 0
iRow = 4
For Each objBlatt In ActiveWorkbook.Worksheets
'Alle Spalten mit Namen durchlaufen
If objBlatt.Name = "Tabelle1" Then
Do
If Cells(iRow, 4) <> "X" Then
'... Blattnamen in unsichtbare erste Spalte schreiben
.AddItem objBlatt.Name
'Namen des Teilnehmers in erste Spalte schreiben
.List(.ListCount - 1, 1) = objBlatt.Cells(iRow, 1).Value
'Nächster Wert in zweite Spalte schreiben
.List(.ListCount - 1, 2) = objBlatt.Cells(iRow, 2).Value
End If
iRow = iRow + 1
iloop = iloop + 1
Loop While iloop < anzahl_der_teilnehmer
End If
Next
'Wenn Listenfeld leer ist, dann...
If .ListCount = 0 Then
'... Makro beenden
End
'Ansonsten...
Else
'... erstes Listenelement markieren
.ListIndex = 0
End If
End With
'Userform anzeigen
.Show
'Wenn Anwender 'Abbrechen' gewählt hat, dann...
If .Tag = "Abbruch" Then
'... Makro beenden
End
End If
Set objBlatt = GetWorksheet(.lstListbox.Value)
End With
End Sub
Function GetWorksheet(strName As String) As Worksheet
Dim objBlatt As Worksheet
'Alle Blätter der aktuelle Arbeitsmappe durchlaufen
For Each objBlatt In ActiveWorkbook.Worksheets
'Wenn Blatt mit angegebenem Namen gefunden, dann...
If objBlatt.Name = strName Then
'... Verweis auf Blatt zurückliefern
Set GetWorksheet = objBlatt
'Schleife verlassen
Exit For
End If
Next
End Function