2015-05-29 22 views
6

Das sollte einfach sein, aber ich kann keine klare Antwort finden.Wann sollte range.value verwendet werden?

Wenn ich einen Bereich lese/schreibe, wann verwende ich nur den Bereichsnamen und wann brauche ich range.value? Spielt es eine Rolle, ob es sich um eine oder mehrere Zellen handelt? Ist es wichtig, was der Typ der Variablen ist? Oder die Art der Daten im Bereich? Gibt es dafür eine Best Practice?

Zum Beispiel sollte ich schreiben

`a = Range("Test")` 

oder sollte ich schreiben

`a = Range("Test").value` 

Ähnlich

`Range("Test") = a` 

oder

`Range("Test").value = a` 

Antwort

7

Im Range Objekt Excel, die Standard-member ist Value

So SomeVariable = Range("A1") gleiche ist wie SomeVariable = Range("A1").Value

Ähnlich Range("A1") = SomeVariable ist die gleiche wie Range("A1").Value = SomeVariable

Sie zu haben natürlich vorsichtig sein, wenn Sie a = Range("Test")

sagen

Wenn Sie versuchen, den Wert aus einem zusammenhängenden Bereich in einer Variant-Variablen zu speichern, z. B. Test rs zu sagen, A1:A10, dann werden Sie eine Reihe von Werten

erhalten
Sub Sample() 
    Dim Myar 

    Myar = Range("A1:A10").Value 

    Debug.Print UBound(Myar) 
End Sub 

Auch in diesem Fall Myar = Range("A1:A10").Value das gleiche ist wie Myar = Range("A1:A10")

Wenn ich lese/auf einen Bereich zu schreiben, wann Ich verwende nur den Bereichsnamen und wann muss ich range.value verwenden?

Ich bin nicht sicher, was Sie when do I just use the range name bedeuten tun, aber es spielt keine Rolle, ob Sie .Value verwenden oder nicht, wenn Sie Lesen/Schreiben von/auf einen Bereich. IMHO, ist es eine gute Praxis zu verwenden .Value :)

Ist es wichtig, ob der Bereich ist eine Zelle oder mehrere Zellen?

Nein, es ist auch in diesem Fall egal, wenn Sie .Value verwenden oder nicht.

Ist es wichtig, was der Typ der Variablen ist?

Oh ja! Siehe das obige Array Beispiel

Oder die Art der Daten im Bereich?

Excel-Zellen können verschiedene Arten von Daten speichern. Von Zahlen über Daten bis zu Strings. Da Sie nicht wissen, was dieser Typ sein kann, wird empfohlen, bei der Arbeit mit diesem Typ Variant zu verwenden. Hier ist ein klassisches Beispiel

Lassen Sie uns sagen Zelle A1 diese Nummer hat 123456789

Jetzt versuchen diesen Code

Sub Sample() 
    Dim someVariable As Integer 

    someVariable = Range("A1").Value 

    Debug.Print someVariable 
End Sub 

Und jetzt versuchen Sie dieses

Sub Sample() 
    Dim someVariable As Variant 

    someVariable = Range("A1").Value 

    Debug.Print someVariable 
End Sub 

Edit:

Wie bereits erwähnt von Tim Williams

Mit .Wert auch nützlich ist, "dis-ambiguate" die gemeinsamen "vergessen Set zu verwenden, wenn ein Objektvariable zuweisen" Problem - Dim a: Legen Sie ein = Range ("A1") vs Dim a: a = Bereich ("A1") Im zweiten Fall verdeutlicht immer die Verwendung von .Value das eigentliche Problem -

+1

Nice one Siddharth. Ich mag es auch explizit, '.Value' zu ​​spezifizieren, da es Anfängern beim Lesen des Codes hilft und hilft, mit dem alten Nugget' .Value2' zu differenzieren (siehe hier Raghu http://stackoverflow.com/questions/17359835/what-is-the-difference -zwischen-text-value-and-value2) – CuberChase

+1

Großartige Sachen Siddharth :) Um das obengenannte zu ergänzen, wenn Sie mehr wie ich als Siddharth sind, dann wird die Verwendung von Qualifikationen wie .value, selbst wenn nicht unbedingt notwendig, Ihnen helfen, zu halten Verfolgen Sie, welche Daten Sie erfassen und Fehler beheben möchten, wenn Sie Typ-Mismatch-Fehler erhalten. Ich bevorzuge es auch, die Verwendung von Variant aus dem gleichen Grund zu vermeiden (und für den extrem geringen Vorteil, weniger Speicher zu verwenden). Offensichtlich, wenn Sie nicht regelmäßig diese Fehler gemacht haben, würde ich sagen, dass Siddharths Rat der richtige Weg ist. – puzzlepiece87

+3

Die Verwendung von '.Value' ist auch nützlich, um das allgemeine" vergessen zu verwenden Set bei der Zuweisung einer Objektvariablen "zu" disambiguate "-" Dim a: Set a = Bereich ("A1") 'vs' Dim a: a = Bereich ("A1") 'Im zweiten Fall verdeutlicht die Verwendung von' .Value' das eigentliche Problem –

Verwandte Themen