Was ist das nur für ein Quatsch, ...
09.11.2013 15:01:49
Luc:-?
…Albert,
was du da verlangst. Das schlägt (universalem) Sinn und Zweck einer Fkt voll ins Gesicht. Offensichtlich hast du keine Ahnung davon, und wer dich bei deinem Ansinnen unterstützt, ebenfalls nicht! :-X
Es kommt doch 1. darauf an, wo du sie einsetzen willst → in einer ZellFml des TabBlatts oder aus einer Subprozedur heraus, und 2. wie du sie argumentierst! Ist das so schwer zu begreifen, dass einer/dieser Fkt ihr Einsatzbereich schon als Argument übergeben wird?! Das kann man übrigens auch mit Subprozeduren machen.
Ich weiß ja nicht, was da schneller geworden sein soll, aber ein Aufruf dieser Fkt mit einem falschen Bezugsargument (Ref=Bezug) ist doch wohl ohnehin absolut hirnrissig! Und wenn du mehrere voneinander getrennte Bereiche prüfen willst, musst du sie eben mehrmals aufrufen bzw mehrmals notieren, abgesehen mal davon, dass sie ohnehin nicht matrixfmltauglich ist und somit nur auf einzelne Zellen und keine Zellbereiche angewendet wdn kann. Außerdem ist sie unnötig verschwurbelt.
So würde es reichen:
Public Function IsFormula(ByVal Zelle As Range) As Boolean
IsFormula = Zelle.HasFormula
End Function
Oder für ganze Bereiche:
Public Function IsFormula(Optional ByVal Bereich As Range)
Dim xErg() As Boolean, nS As Long, nZ As Long, xS As Long, xZ As Long, xB As Range
If Bereich Is Nothing Then
If IsError(Application.Caller) Then
Set Bereich = ActiveWindow.RangeSelection
Else: IsFormula = True: Exit Function
End If
End If
With Bereich
nZ = .Rows.Count: nS = .Columns.Count
End With
ReDim xErg(nZ - 1, nS - 1)
For Each xB In Bereich
xErg(xZ, xS) = xB.HasFormula
xS = (xS + 1) Mod nS: xZ = xZ - CInt(xS = 0)
Next xB
IsFormula = xErg: Set Bereich = Nothing
End Function
Bei dieser Variante kann bei Einsatz in einer Subprozedur das Argument auch fehlen, es wird dann der selektierte Bereich des aktuellen Blattes verwendet.
Gruß Luc :-?