Verzeihen Sie mir, ich bin ein Neuling in VBA.
Manchmal verwende ich
Dim r as Range
r = Range("A1")
Andere Male verwende ich
Set r = Range("A1")
Worin besteht der Unterschied? Und wann sollte ich was verwenden?
Verzeihen Sie mir, ich bin ein Neuling in VBA.
Manchmal verwende ich
Dim r as Range
r = Range("A1")
Andere Male verwende ich
Set r = Range("A1")
Worin besteht der Unterschied? Und wann sollte ich was verwenden?
Es gibt keinen Grund für die Verwendung von set
es sei denn, sie beziehen sich auf eine Objektreferenz. Es ist gute Praxis, ihn nur in diesem Zusammenhang zu verwenden. Für alle anderen einfachen Datentypen sollten Sie einfach einen Zuweisungsoperator verwenden. Es ist eine gute Idee, die dim
(Dimension) ALLE Variablen jedoch:
Beispiele für einfache Datentypen wären integer
, long
, boolean
, string
. Diese sind nur Datentypen und haben keine eigenen Methoden und Eigenschaften.
Dim i as Integer
i = 5
Dim myWord as String
myWord = "Whatever I want"
Ein Beispiel für eine object
wäre ein Range
, a Worksheet
oder eine Workbook
. Diese haben ihre eigenen Methoden und Eigenschaften.
Dim myRange as Range
Set myRange = Sheet1.Range("A1")
Wenn Sie versuchen, die letzte Zeile ohne Set
wird VB einen Fehler ausgeben. Da Sie nun eine object
erklärt, können Sie auf seine Eigenschaften und Methoden zugreifen.
myString = myRange.Value
Dim
deklariert die Variable .
Dim r As Range
Set
setzt die Variable zu einer Objektreferenz .
Set r = Range("A1")
Ich glaube jedoch nicht, dass dies Ihre eigentliche Frage ist.
Manchmal verwende ich:
Dim r as Range r = Range("A1")
Das wird niemals funktionieren. Ohne Set
erhalten Sie einen Laufzeitfehler #91 Objektvariable oder With-Block-Variable nicht gesetzt . Der Grund dafür ist, dass Sie debe verwenden. Set
um einer Objektreferenz einen Variablenwert zuzuweisen. Dann wird der obige Code 意志 Arbeit.
Ich denke, der folgende Code veranschaulicht, was Sie meinen wirklich und fragt nach. Nehmen wir an, wir deklarieren keinen Typ und lassen r
ein sein Variant
Typ stattdessen.
Public Sub test()
Dim r
debug.print TypeName(r)
Set r = Range("A1")
debug.print TypeName(r)
r = Range("A1")
debug.print TypeName(r)
End Sub
Schauen wir uns also an, was hier passiert.
r
wird als Variante deklariert
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r
wird auf den Range
die Zelle "A1" enthält
Set r = Range("A1") ' TypeName(r) returns "Range"
r
wird auf den Wert der Standardeigenschaft von Range("A1")
.
r = Range("A1") ' TypeName(r) returns "String"
In diesem Fall ist die Standardeigenschaft eines Bereichs .Value
Die folgenden zwei Codezeilen sind also gleichwertig.
r = Range("A1")
r = Range("A1").Value
Weitere Informationen über Standardobjekteigenschaften finden Sie unter Chip Pearsons "Standard-Mitglied einer Klasse" .
Was Ihre Set
Beispiel:
Andere Male verwende ich
Set r = Range("A1")
Dies würde nicht funktionieren, ohne vorher zu erklären, dass r
ist eine Range
o Variant
Objekt... unter Verwendung der Dim
Anweisung - es sei denn, Sie haben keine Option Explicit
aktivieren, was Sie tun sollten. Immer. Andernfalls verwenden Sie Bezeichner, die Sie nicht deklariert haben, und sie sind alle implizit deklariert als Varianten .
Dim: Sie definieren eine Variable (hier: r ist eine Variable vom Typ Range)
Setzen: Sie setzen die Eigenschaft (hier: setzen Sie den Wert von r auf Range("A1") - dies ist kein Typ, sondern ein Wert).
Sie müssen set mit Objekten verwenden, wenn r ein einfacher Typ wäre (z.B. int, string), dann würden Sie einfach schreiben:
Dim r As Integer
r=5
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.