Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

With Anweisung löscht Variant Instanz?!

Forumthread: With Anweisung löscht Variant Instanz?!

With Anweisung löscht Variant Instanz?!
Andreas
Hallo Excel Freunde,
ich bin am Wochenende über ein Phänomen gestolpert, welches ich mit meinem bisherigen Wissen nicht erklären kann.
Ich habe eine Prozedur die von diversen anderen Codes aufgerufen wird. Es gibt einen Variant- Aufrufparameter „varRef“. Dieser kann fast alles sein. Ein Array (ein oder mehrdimensionales), eine Collection oder ein Range. Die Prozedur ermittelt durch einfache Prüfung, um was es sich handelt und schreibt alles in eine einheitliche Form um, mit der dann weitergearbeitet wird. Um die Prozedur noch etwas zu erweitern habe ich am Sonnabend nun an der Position „2: “ im VBA Code ein Prüfung einfügen wollen – derzeit dargestellt durch die Zeile „Debug.Print "2: "; varRef(l)“. Bei Strings innerhalb des „varRef“ gab der Debug.Print nichts aus. An Position „1: “ hingegen wurde erwartungsgemäß der String im „varRef“ ausgegeben. Aber dazwischen gab es nur eine „With“ Anwiesung innerhalb derer geprüft wurde, um welche Form von Inhalt es sich im „varREf“ handelt (Range oder Object). Wenn ich die „With“ Anweisung auskommentieren, dann wird an Position 1 und (!) 2 der Inhalt korrekt ausgegeben.
Warum beeinflußt diese „With“ Anweisung das „varRef“ so negativ? Habe ich etwas übersehen oder unterliege ich einem eklatanten Denkfehler?!
Ich sehe den Wald vor lauter Bäumen nicht mehr und weiß nicht weiter, daß ich in so wenigen Codezeilen den Fehler nicht erkenne…
Ich wäre sehr erfreut, wenn ein erfahrener und hilfsbereiter Forumsteilnehmer sich den Code einmal ansieht.
https://www.herber.de/bbs/user/81484.xlsm
Vielen Dank und Grüße aus Berlin, Andreas Hanisch
Anzeige

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

Betreff
Benutzer
Anzeige
VarType() verwenden
20.08.2012 16:52:00
Erich
Hi Andreas,
so ganz verstehe ich das auch nicht.
Sicher ist, dass hinter "With" immer ein Objekt (oder ein benutzerdefinierter Typ) stehen muss (VBA-Hilfe zu With).
Das ist bei deinem Beispiel nicht der Fall. Eigentlich müsste die "With"-Zeile schon einen Fehler auslösen.
Stattdessen wird wohl versucht, aus dem Arrayelement irgendwie ein Objekt zu machen.
Du solltest With nur bei Objekten verwenden. Für die Unterscheidung der möglichen Datentypen gibt es VarType().
Schau dir mal den folgenden (noch Pseudo-)Code an:

Sub Variant_prc(ByVal varRef As Variant)
Dim ii As Long, intTyp As Integer
intTyp = VarType(varRef)            ' Typ des gesamten varRef
If intTyp >= vbArray Then           ' nur dann ist LBound usw. definiert
Debug.Print "Typ: Arr"; intTyp
For ii = LBound(varRef, 1) To UBound(varRef, 1)
intTyp = VarType(varRef(ii))  ' Typ des Arrayelements
Debug.Print "Typ: "; ii; intTyp
'   if Typ ist range oder object: (nur dann ist 'With' sinnvoll
With varRef(ii)
End With
'   else
'   end if
Next ii
End If
End Sub
Die Werte für vbObject usw. findest du in der VBA-Hilfe zu VarType().
Wichtig ist auch die Bemerkung zu vbArray.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: VarType() verwenden
21.08.2012 12:36:31
Andreas
Hallo Erich,
vielen Dank für Deine Antwort. Ich habe gestern begonnen, Deinen Tip mit der 'varType' Prüfung umzusetzen und bin erfreut nun einen neuen Befehl zu kennen. Es ist ein hoffnungsvoller Ansatz. Ich werde wohl meinen ganzen Code umstrukturieren, um den kruden Fehler zu beseitigen.
Danke Dir für Deine wertvolle und nützliche Anregung!
Grüße aus Berlin, Andreas Hanisch
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige