Bei der Ausführung eines VBA-Codes, in dem die Formel: Evaluate("SUMPRODUCT ... etc ...") verwendet wird,
habe ich ein Problem damit, bei Einsatz von Objektvariablen (Dim rngDAT As Range, rngVAL As Range)
zum richtigen Ergebnis zu kommen.
In meiner Arbeitsmappe gibt es zwei Worksheets:
'Auswertung' mit den Feldern: A1: Monat, B1: Jahr, C1: Anzahl, D1: Summe
und 'Kosten' mit den Feldern: A1: Datum, B1: Wert
Der folgende Code liefert als Ergebnis der Berechnung jeweils 0, sowohl für Anzahl als auch für Summe.
Sub Kosten_auswerten()
Dim wksA As Worksheet, wksK As Worksheet
Dim intA%, intN%
Dim iJA%, iMo%
Dim lngX As Long
Dim rngDAT As Range, rngVAL As Range
Application.ScreenUpdating = False
Set wksA = ThisWorkbook.Worksheets("Auswertung")
Set wksK = ThisWorkbook.Worksheets("Kosten")
lngX = wksK.Range("A1").End(xlDown).Row
Set rngDAT = wksK.Range("A2:A" & lngX)
Set rngVAL = wksK.Range("B2:B" & lngX)
wksA.Activate
wksA.Range("C2").Select
intN = wksA.Range("A65536").End(xlUp).Row - 1
For intA = 1 To intN
iJA = ActiveCell.Offset(0, -1).Value
iMo = ActiveCell.Offset(0, -2).Value
'die 1. Formel findet die Anzahl der Werte pro Monat (Ergebnis in Spalte C):
ActiveCell.Value = Evaluate("SUMPRODUCT(" & _
"--(MONTH(" & rngDAT.Address & ")= " & iMo & ")," & _
"--(YEAR(" & rngDAT.Address & ")= " & iJA & "))")
'die 2. Formel bildet die Summe der Werte des jeweil. Monats (Ergebnis in Spalte D):
ActiveCell.Offset(0, 1).Value = Evaluate("SUMPRODUCT(" & _
"--(MONTH(" & rngDAT.Address & ")= " & iMo & ")," & _
"--(YEAR(" & rngDAT.Address & ")= " & iJA & ")," & rngVAL.Address & ")")
ActiveCell.Offset(1, 0).Select
Next
Set wksA = Nothing
Set wksK = Nothing
Set rngDAT = Nothing
Set rngVAL = Nothing
End Sub
Wenn ich auf die Verwendung der Objektvariablen verzichte und statt dessen die Bereiche direkt anspreche, bekomme ich sehr wohl die richtigen Ergebnisse!
Ich ersetze also 'rngDAT' und 'rngVAL' mit 'Kosten!A2:A568' bzw. 'Kosten!B2:B568' und es werden die korrekten Ergebnisse geliefert.
Hat jemand eine Erklärung dafür, wieso meine Variablen 'rngDAT' und 'rngVAL' in diesem Zusammenhang nicht funktionieren?