Deklarieren und verwenden-Bereich in vba
Ich bin ganz neu in der VBA
Heute entwickeln Sie ein makro bemerkte ich etwas komisches.
Mit Range
wie das funktioniert :
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
Mit Range
wie dieser funktioniert nicht und resultiert in Fehlermeldung "Objektvariable nicht festgelegt" :
Dim rg As Range
rg = ActiveSheet.Range("A1:B2")
aber mit Range
wie das funktioniert :
Dim rg,rg2 As Range
rg = ActiveSheet.Range("A1:B2")
Wie ist es möglich?
- Ich glaube, du wirst finden, dass Sie nicht "wirklich" funktioniert es einfach nicht Auslöser der compiler Fehler beim kompilieren. Zum Beispiel, fügen Sie
Debug.Print rg.Address
am Ende und es wird nur funktionieren, wenn SieSet
- Fast ein Duplikat von stackoverflow.com/a/17877644/11683, mit dem Zusatz von stackoverflow.com/a/19234210/11683.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entdecken Sie
Variant
- und Objekt-Referenzen.Einen
Range
ist ein Objekt - einVariant
werden kann alles einschließlich ein Objekt.Dies ist der richtige Weg, um darüber zu gehen:
Weil:
rg
alsRange
Objekt.Set
Stichwort.Wenn Sie nicht specity die
Set
Stichwort, du bist die Zuweisung einer Objekt-Referenz mit der VBA-syntax für Werte Aufgaben, und das ist ein Fehler:Wenn Sie deklarieren mehrere Variablen mit dem gleichen Befehl, und nur einen Typ angeben, der für die Letzte, dann
rg
ist einVariant
hier:- Und VBA-gerne lassen, weisen Sie eine
Variant
mit nur etwa alles... aber die Dinge sprengen, die zur Zeit ausführen.rg
erklärt wirdVariant
dannrg = ActiveSheet.Range("A1:B2")
weist Werte von "A1:B2" zu rg (kein Fehler existiert).rg
ist dann array von Varianten(1 to 2, 1 to 2)
.Value
ist nicht die default-Eigenschaft vonRange
... zumindest in meiner Excel-version 2007. stackoverflow.com/questions/17877536/...Erweiterung auf Mathieu Guidon Antwort:
Wenn Sie möchten, um anzugeben, dass zwei Objekte mit dem gleichen Befehl (eine Zeile), sollten Sie die folgende syntax verwenden:
Dies richtig zuordnen kann sowohl
rg
undrg2
als ein range-Objekt.Mit
Dim rg, rg2 As Range
nur rg2 zugeordnet ist als eine Wut-Objekt (rg wird eine Variante), Mathieu Guidon richtig erklärt.