ich habe schon so manche Lösung bei euch gefunden. Ein wirkliches tolles Forum.
Zu folgendem Problem habe ich verschiedene VBA-Schnipsel kombiniert, aber leider funktioniert das Ganze nicht.
Ziel: Ich möchte für Funktionen, die einen Bereich brauchen, z.B. Min(), den Bereich nicht explizit eingeben, sondern über eine Funktion berechnen. Der Bereich wird über die Gliederung von Zeilen definiert. Da ich nicht weiss wie ich die Gliederungsebene auslese, habe ich eine Hilfsspalte (Spalte A) erstellt in der die Gliederung nachgebildet ist. 1 steht für Ebene 1, 2 für Ebene 2 usw.
Berechnet wird der Bereich ab der Zelle in der die Formel steht.
Die Funktion:
Function Bereich() As range
'Deklaration von Variablen
Dim lngStartSpalte As Long
Dim lngStartZeile As Long, lngEnde As Long
Application.Volatile
'Zeile ab der der Bereich berechnet wird
lngStartZeile = range(Application.Caller.Address).row
lngStartSpalte = range(Application.Caller.Address).Column
If ActiveSheet.Cells(lngStartZeile + 1, 1).Value > ActiveSheet.Cells(lngStartZeile, 1).Value _
_
_
Then
lngEnde = lngStartZeile + 1
'Berechnet das Ende des gruppierten Bereichs.
Do While ActiveSheet.Cells(lngEnde, 1) > ActiveSheet.Cells(lngStartZeile, 1)
If ActiveSheet.Cells(lngEnde, 1) = 0 Then Exit Do
lngEnde = lngEnde + 1
Loop
Set Bereich = range(Cells(lngStartZeile, lngStartSpalte), Cells(lngEnde - 1, _
lngStartSpalte))
End If
End Function
Das Problem:
00.01.1900 - hier steht die Formel =Min(Bereich())
14.02.2012 - 1. Zeile des Bereichs
17.02.2012 - 2. Zeile des Bereichs
Erwartetes Ergebnis: 14.02.2012
Ergebnis der Berechnung: #Wert
Wenn ich mit F2 die Formel editiere (keine Veränderung, einfach nur rein und wieder raus aus der Zelle), dann ändert sich das Ergebnis auf 00.01.1900
Fehlerhinweis: Ein in der Formel verwendeter Wert ist vom falschen Datentyp.
Ich bin am Ende meines VBA-Wissens angekommen.
Weiss einer der Experten Rat?
Gruß
Hartmut