Ein eher allgemeines Problem mit Funktionen
05.12.2003 10:23:12
MaxG
Gleich vorne weg: die beiden folgenden Routinen stehen in einem Add-In und werden bei Bedarf nur in
die jeweiligen Anwendungen eingebunden und laufen seit zig Monaten in allen möglichen Anwendungen und
auch mit allen möglichen Datenarten (also: Datum, String, Zahlen etc.) einwandfrei.
(Das Problem kommt weiter unten - Gemach !)
Zu diesen Routinen muß man folgendes wissen:
Jede Spalte hat bei mir eine Überschrift und nur diese Überschrift kriegt einen Namen und diesen
Namen spreche ich als Range-Objekt an; deshalb: ColHeadObj as Range.
Ich habe auch niemals 2 Tabellen untereinander.
Function xFind(SearchValue, ColHeadObj As Range) As Range
Set xFind = xGetDC(ColHeadObj, True). _
Find(SearchValue, LookIn:=xlFormulas, matchcase:=True, lookat:=xlWhole)
End Function
Function xGetDC(ColHeadObj As Range, MitHeader As Boolean) As Range
Dim LetzteZeile As Long
Dim ErsteZelle As Long
With Worksheets(ColHeadObj.Parent.Name)
LetzteZeile = .Cells(Rows.Count, ColHeadObj.Column).End(xlUp).Row
ErsteZelle = ColHeadObj.Row
If Not MitHeader Then ErsteZelle = ErsteZelle + 1
If (LetzteZeile < ErsteZelle) Then LetzteZeile = ErsteZelle
Set xGetDC = .Range(.Cells(ErsteZelle, ColHeadObj.Column), .Cells(LetzteZeile,
ColHeadObj.Column))
End With
End Function
Soweit das Add-In.
Meine aktuelle Arbeitsmappe soll als eine komfortable Stechuhr funktionieren.
In dieser Mappe gibt es u.a. die folgende Funktion in gekürzter Form:
Function Tagesgesamtzeit_Ermitteln(datum) As Single
Dim Gefunden As Range
Dim Gesamtzeit As Single
Tagesgesamtzeit_Ermitteln = 0
Set Gefunden = xFind(datum, xDatum) 'xDatum wird in einer Ini-Routine korrekt gesetzt.
If Gefunden Is Nothing Then Exit Function
Tagesgesamtzeit_Ermitteln = Gesamtzeit
End Function
Wenn ich diese Routine bspw. so aufrufe:
Anwesenheit = Tagesgesamtzeit_Ermitteln(irgendeindatum)
dann greift er absolut korrekt auf den entsprechenden Bereich zu, sammelt die einzelnen Zeiten des
übergebenen Datums, ermittelt die Anwesenheitszeit und hat fertig.
Da gibt es nix zu meckern.
Aber: wenn ich die Ermittlungsroutine aus einer Zelle heraus ausführen will:
=Tagesgesamtzeit_Ermitteln(A6)
produziert das System immer Null.
Und das kommt daher, daß "Gefunden" IMMER nothing enthält, egal was ich auch anstelle.
Frage:
Gibt es vielleicht irgendwelche Einschränkungen beim Aufruf von Funktionen aus den Arbeitsblättern
heraus ?
Ich hab mal versucht, innerhalb der Funktion einen Bereich zu markieren; hat auch nicht geklappt.
Noch ein Hinweis: es kommen KEINE Fehlermeldungen hoch.
Ich danke Euch schon mal im voraus für Eure Bemühungen.
Max