Option
Explicit
Private
Enum
CustomResultArgsEnum
TableTopLeftCellAddr = 0
WorkerColumn = 1
WorkerValue
DateColumn
DateValue
StatusColumn
StatusValue
Status_Op
[_Min] = TableTopLeftCellAddr
[_Max] = Status_Op
[_Default] = WorkerColumn
End
Enum
Private
Enum
CustomResultEnum
EqualVM = 1
NotEqualVM
[_Min] = EqualVM
[_Max] = NotEqualVM
[_Default] = EqualVM
End
Enum
Public
Sub
UpdateView()
Dim
alngResult(CustomResultEnum.[_Min]
To
CustomResultEnum.[_Max])
As
Long
Dim
astrArgs(CustomResultArgsEnum.[_Min]
To
CustomResultArgsEnum.[_Max])
As
String
Dim
strFormula
As
String
astrArgs(CustomResultArgsEnum.TableTopLeftCellAddr) =
"A1"
astrArgs(CustomResultArgsEnum.WorkerColumn) =
"B"
astrArgs(CustomResultArgsEnum.DateColumn) =
"K"
astrArgs(CustomResultArgsEnum.StatusColumn) =
"R"
Dim
wks
As
Excel.Worksheet
Dim
rngData
As
Excel.Range
Dim
blnSkip
As
Boolean
Dim
i
As
Long
For
Each
wks
In
ThisWorkbook.Worksheets
blnSkip = StrComp(wks.Name,
"Übersicht"
, vbTextCompare) = 0
If
blnSkip =
False
Then
With
wks.Range(astrArgs(CustomResultArgsEnum.TableTopLeftCellAddr))
Set
rngData = .Worksheet.Cells(.Row, .Worksheet.Columns.Count).
End
(xlToLeft)
Set
rngData = .Worksheet.Range(rngData, .Worksheet.Cells(.Worksheet.Rows.Count, .Column).
End
(xlUp))
If
rngData.Row < .Row
Then
Call
MsgBox(
"Keine Daten / Außerhalb der Kopfzeilen-Definition gelandet."
, vbCritical)
Exit
Sub
ElseIf
rngData.Rows.Count = 1
Then
blnSkip =
True
Else
astrArgs(CustomResultArgsEnum.WorkerValue) = rngData.Columns(astrArgs(CustomResultArgsEnum.WorkerColumn)).Offset(0, 1 - rngData.Column).Address
astrArgs(CustomResultArgsEnum.DateValue) = rngData.Columns(astrArgs(CustomResultArgsEnum.DateColumn)).Offset(0, 1 - rngData.Column).Address
astrArgs(CustomResultArgsEnum.StatusValue) = rngData.Columns(astrArgs(CustomResultArgsEnum.StatusColumn)).Offset(0, 1 - rngData.Column).Address
End
If
End
With
If
blnSkip =
False
Then
For
i = LBound(alngResult)
To
UBound(alngResult)
Select
Case
i
Case
CustomResultEnum.EqualVM: astrArgs(CustomResultArgsEnum.Status_Op) =
"<>"
Case
CustomResultEnum.NotEqualVM: astrArgs(CustomResultArgsEnum.Status_Op) =
"="
Case
Else
: blnSkip =
True
End
Select
If
blnSkip
Then
blnSkip =
False
Else
strFormula =
"=COUNTIFS("
& _
"$ARG.1$,"
"Note 3 FG"
","
& _
"$ARG.2$,"
">="
"&DATE(YEAR(TODAY()),MONTH(TODAY()),1), $ARG.2$,"
"<="
"&DATE(YEAR(TODAY()),MONTH(TODAY())+1,0),"
& _
"$ARG.3$,"
"$ARG.4$VM"
")"
strFormula = Replace$(strFormula,
"$ARG.1$"
, astrArgs(CustomResultArgsEnum.StatusValue), Compare:=vbTextCompare)
strFormula = Replace$(strFormula,
"$ARG.2$"
, astrArgs(CustomResultArgsEnum.DateValue), Compare:=vbTextCompare)
strFormula = Replace$(strFormula,
"$ARG.3$"
, astrArgs(CustomResultArgsEnum.WorkerValue), Compare:=vbTextCompare)
strFormula = Replace$(strFormula,
"$ARG.4$"
, astrArgs(CustomResultArgsEnum.Status_Op), Compare:=vbTextCompare)
alngResult(i) = alngResult(i) + rngData.Worksheet.Evaluate(strFormula)
End
If
Next
End
If
End
If
Next
Application.EnableEvents =
False
Range(
"D3"
).Value = alngResult(CustomResultEnum.EqualVM)
Range(
"D11"
).Value = alngResult(CustomResultEnum.NotEqualVM)
Application.EnableEvents =
True
End
Sub