Option Explicit
'********************************************************************
Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBNichtWerktags9bis18Uhr()
Const c_SP_B = 2
Const c_SP_C = 3
Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date, sTelNr As String
lLetzteZeile = ActiveSheet.UsedRange.Row + _
ActiveSheet.UsedRange.Rows.Count - 1
For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
->Zeilen ohne Datum überspringen
If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
If Not WerktagsVon09Bis1800(dDateTime) Then
sTelNr = ActiveSheet.Cells(lZeile, c_SP_C).Value
If Not TelefonNummernfilter(sTelNr) Then
ActiveSheet.Rows(lZeile).Delete
End If
End If
End If
Next
End Sub
'********************************************************************
Sub Excel_ZeileLoeschenWennDatumZeitInSpalteBWerktags9bis18Uhr()
Const c_SP_B = 2
Const c_SP_C = 3
Const c_ZUEBERCHRIFT = 1->Zeile Überschrift
Dim lLetzteZeile As Long, lZeile As Long, dDateTime As Date, sTelNr As String
lLetzteZeile = ActiveSheet.UsedRange.Row + _
ActiveSheet.UsedRange.Rows.Count - 1
For lZeile = lLetzteZeile To c_ZUEBERCHRIFT + 1 Step -1
->Zeilen ohne Datum überspringen
If IsDate(ActiveSheet.Cells(lZeile, c_SP_B).Value) Then
dDateTime = ActiveSheet.Cells(lZeile, c_SP_B).Value
If WerktagsVon09Bis1800(dDateTime) Then
sTelNr = ActiveSheet.Cells(lZeile, c_SP_C).Value
If Not TelefonNummernfilter(sTelNr) Then
ActiveSheet.Rows(lZeile).Delete
End If
End If
End If
Next
End Sub
'********************************************************************
Private Function WerktagsVon09Bis1800(dDateTime As Date) As Boolean
'*** True, wenn Datum/Zeit Werktags(Mo-Fr) 9:00 bis 18:00 ist
Dim iWochentag As Integer
Dim iStd As Integer, iMin As Integer, iSec As Integer
iWochentag = WeekDay(dDateTime)
iStd = Hour(dDateTime)
iMin = Minute(dDateTime)
iSec = Second(dDateTime)
->Werktags9bis18Uhr ?
If IstFeiertag(dDateTime) Then
WerktagsVon09Bis1800 = False
ElseIf (iWochentag = vbSaturday) Or (iWochentag = vbSunday) Then
WerktagsVon09Bis1800 = False
ElseIf iStd >= 9 And iStd <= 17 Then
WerktagsVon09Bis1800 = True
ElseIf iStd = 18 And iMin = 0 And iSec = 0 Then
WerktagsVon09Bis1800 = True
Else
WerktagsVon09Bis1800 = False
End If
End Function
'********************************************************************
Private Function IstFeiertag(dDateTime As Date) As Boolean
'*** True, wenn Datum/Zeit Feiertag ist
Dim FeiertageDatum As Variant
FeiertageDatum = Array(14.4.2006, 16.4.2006, 17.4.2006, _
1.5.2006, 25.5.2006, 4.6.2006, _
5.6.2006)
Dim sDatum As String, x As Long
sDatum = Format(dDateTime, d.m.yyyy)
IstFeiertag = False
For x = LBound(FeiertageDatum) To UBound(FeiertageDatum)
If sDatum = FeiertageDatum(x) Then IstFeiertag = True: Exit For
Next
End Function
Private Function TelefonNummernfilter(sTelNr As String) As Boolean
'*** True, wenn sTelNr mit einem TelNrFilter anfängt
Dim TelNrFilter As Variant, x As Long
TelNrFilter = Array(170, 171)
TelefonNummernfilter = False
If sTelNr = Then Exit Function
For x = LBound(TelNrFilter) To UBound(TelNrFilter)
If TelNrFilter(x) = Left(sTelNr, Len(TelNrFilter(x))) Then
TelefonNummernfilter = True: Exit For
End If
Next
End Function