Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige