Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verweis auf variablen Bereich mittels Set-Anweisun

Verweis auf variablen Bereich mittels Set-Anweisun
26.07.2007 13:49:00
val
Hallo VBA-Profis,
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?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verweis auf variablen Bereich mittels Set-Anweisun
26.07.2007 14:33:47
IngGi
Hallo val,
die Eigenschaft .Address liefert nur die Zelladresse der Rangevariablen, ohne einen Bezug auf das Tabellenblatt und die Arbeitsmappe, zurück. Wenn du über das Tabellenblatt referenzieren musst, müsste es statt rngDAT.Address daher
rngDAT.Parent.Name & "!" & rngDAT.Address
heißen.
Gruß Ingolf

AW: Verweis auf variablen Bereich mittels Set-Anweisun
26.07.2007 14:47:00
val
Vielen Dank Ingolf,
Das trifft den Nagel auf den Kopf, Excel/VBA kann ganz schön pingelig sein, jedenfalls habe ich was dazugelernt.
mfg val
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige