Korrekt ist: Man muss nicht auf Objekt prüfen.
Falsch ist: Man kann es sich daher sparen.
Das wiederspricht sich.
TypeName ist unzureichend
[zur Veranschaulichung: Ist das Objekt nun vom Typ Range oder VBAProject.Range? Das kann dir TypeName nicht beantworten]
Was auch immer du da an Unterschieden ausmachst ... Zeige mir mal bitte die Anwendung meiner Funktion, der du eine Range übergibst und es passiert nicht, was in der Aufgabenstellung steht.
es ist allgemein langsamer als der TypeOf-Operator. (spielt hier jedoch keine nennenswerte Rolle, wie gesagt ... nur am Rande)
Das ist nicht "nur am Rande", das ist im vorliegenden Kontext komplett irrelevant. Aber da du dir das nicht verkneifen konntest, stelle ich es gern richtig. Denn deine Aussage ist falsch. Die Funktion TypeName() ist fast 4x schneller als der Operator TypeOf:
Sub VarTest()
Dim checkObject As Object
Dim result As String
Dim loopRuns As Long
Dim getTimeStart As Double
Set checkObject = ActiveSheet
getTimeStart = Timer
For loopRuns = 0 To 1000000
result = TypeOf checkObject Is Object
Next loopRuns
Debug.Print Timer - getTimeStart
getTimeStart = Timer
For loopRuns = 0 To 1000000
result = TypeName(checkObject)
Next loopRuns
Debug.Print Timer - getTimeStart
End Sub
=> Aus jetziger Sicht kann es sich theoretisch nur um zwei Dinge handel: Range oder Nicht-Range ... oder auch Objekt und Nicht-Objekt. Wenn man weiß, dass nur einzelne Zellen zulässig sind, könnte man sich diese Unterscheidung sogar ganz sparen.
So sehe ich es auch.
Was da alles ankommen kann, kann man nicht mit absoluter Gewissheit sagen
Wie gesagt, gib mir mal bitte ein Beispiel, in dem meine Funktion nicht macht, was in der Aufgabenstellung steht. Mir fällt nämlich nichts ein, was ich da übergeben könnte, was verarbeitet werden müsste, aber nicht wird.
und auch nich dass das, so wie es gerade ist, immer bleiben wird; M$ kann schnell schnell mal ein neues Feature implementieren;
Sorry, aber das halte ich für kompletten Bullshit. Selbst wenn ein neues Feature implementiert werden sollte, was ändert das an der Wirkweise meiner Funktion? Es ist ausgeschlossen, dass grundlegende Dinge von VBA so verändert werden, dass solche einfachen Makros nicht mehr machen was sie sollen. Du kannst mir aber gerne Beispiele aus der Vergangenheit nennen, in denen sowas passiert ist.
Kurz: Typenprüfung ist essenziel und man sollte daran zumindest denken.
Der Aussage ansich stimme ich zu, halte eine Typprüfung für die vorliegende Aufgabenstellung aber weiterhin für irrelevant.
Und darum ging es in dem Makro nur. Aufzeigen was man anhand der Aufgebenstellung zeigen kann.
Ich kenne den Kurs nicht, aber es scheint mir ein Nebenfach zu sein. Deshalb gehe ich davon aus, es soll nicht zwingend alles gezeigt werden was möglich ist, sondern dass eine Funktion geliefert werden soll, die genau das macht was in der Aufgabenstellung steht.
|