Hallo SnowWhite,
hier das geänderte Anlegen-Makro:
Sub Anlegen()
Dim Wiederholungen As Long
Dim wksL As Worksheet
Dim lngEinfZeile As Long
Set wksL = Worksheets("urliste")
Application.ScreenUpdating = False
For Wiederholungen = 1 To wksL.Cells(Rows.Count, 1).End(xlUp).Row
If wksL.Cells(Wiederholungen, 1) <> vbNullString Then
'Name des neu angelegten Tabellenblatts wird in versteckte Tabelle geschrieben
With Worksheets("Test")
'letzte beschriebene Zeile in Spalte A ermitteln und um 1 erhöhen für neue Einfügezeile
lngEinfZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'falls letzte Zeile 1 ist, dann prüfen, ob in A1 etwas steht
'falls Zelle A1 leer ist, dann 1. Einfügezeile auf 1 setzen
If lngEinfZeile = 2 And .Range("A1") = "" Then lngEinfZeile = 1
'Name des Tabellenblatts in verstecktes Blatt schreiben
.Cells(lngEinfZeile, 1) = wksL.Cells(Wiederholungen, 1).Value
End With
Worksheets("Leer").Copy After:=Sheets(Sheets.Count) 'Tabellenblatt "Leer" wird kopiert
With ActiveSheet
'Neues Blatt umbenennen
.Name = wksL.Cells(Wiederholungen, 1).Text 'Als TB Name des neu erstellten TB wird der Name aus der aktiven Zelle genommen von TB urliste.
.Range("O2:O50") = wksL.Cells(Wiederholungen, 2).Value
End With
'Einträge in Tabelle urliste löschen
With wksL
.Range(.Cells(Wiederholungen, 1), .Cells(Wiederholungen, 2)).ClearContents
End With
Else
Exit Sub
End If
Next
Set wksL = Nothing
Application.ScreenUpdating = True
End Sub
Das Makro Check-Mail habe ich jetzt so umgeschrieben, dass es auch ohne Fehler funktionieren sollte, wenn nur eine Tabelle angelegt ist. Gleichzeitig habe ich eine Prüfung eingebaut, die prüft, ob das Arbeitsblatt existiert:
Private Sub Check(ByVal Zeile As Long)
Dim Urgenz1 As String
Dim Urgenz2 As String
Urgenz1 = "x"
Urgenz2 = "x"
Dim i As Long
Dim t As Long
Dim b As Long
Dim lngLetzte As Long
Dim strTabelle As String
Dim wksTabellen As Worksheet
Set wksTabellen = ThisWorkbook.Worksheets("Test")
'Namen der neu angelegten Tabellenblätter aus versteckter Tabelle einlesen
'letzte beschriebene Zeile in Spalte A des versteckten Tabellenblatts ermitteln
lngLetzte = wksTabellen.Cells(Rows.Count, 1).End(xlUp).Row
'nun alle Zeilen dieses Blattes durchlaufen und die Namen der versteckten Tabellenblätter einlesen
For t = 1 To lngLetzte
'Namen in Variable einlesen
strTabelle = wksTabellen.Cells(t, 1).Value
'prüfen, ob Tabelle in Arbeitsmappe existiert
For b = 1 To ThisWorkbook.Worksheets.Count
If Worksheets(b).Name = strTabelle Then
With ThisWorkbook.Worksheets(strTabelle)
For i = Zeile + 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 7).Value <> "" Then
If (CDate(.Cells(i, 7).Value) < DateTime.Date) And (.Cells(i, 13).Value = "x") Then ' Wenn Spalte "G" Datum = heutiges Datum & Spalte "M" auf "Leer" Dann
'MsgBox "Email schon geschickt", vbInformation, "Fertig" 'Message Box als Hilfe stellung
ElseIf .Cells(i, 7).Value <> "" And (CDate(.Cells(i, 7).Value) < DateTime.Date) And (CStr(.Cells(i, 13).Value) = vbNullString) Then 'Wenn Spalte "G" Datum = heutiges Datum & Spalte "M" auf "Leer" Dann
.Cells(i, 13).Value = Urgenz1 'Füge Urgenz1 in Spalte M
Call Send_Email(i, strTabelle) 'Aufruf Prozedur "Send_Email()"
End If
End If
If .Cells(i, 8).Value <> "" Then
If .Cells(i, 8).Value <> "" And (CDate(.Cells(i, 8).Value) < DateTime.Date) And (CStr(.Cells(i, 14).Value) = vbNullString) Then 'Wenn Spalte "H" Datum = heutiges Datum & Spalte "N" auf "Leer" Dann
.Cells(i, 14).Value = Urgenz2 'Füge Urgenz2 in Spalte N
Call Send_Erinnerung(i, strTabelle) 'Aufruf Prozedur "Send_Erinnerung"
End If
End If
Next i
End With
End If
Next b
Next t
' Call MsgBox("Fertig!", vbOKOnly)
End Sub
Getestet habe ich es jetzt nicht. Schau mal, ob alles funktioniert.
Gruß
M.O.