Nell'oggetto Excel Range
, il default member
è Value
Così SomeVariable = Range("A1")
è stessa SomeVariable = Range("A1").Value
Allo stesso modo Range("A1") = SomeVariable
è uguale Range("A1").Value = SomeVariable
Bisogna ovviamente fare attenzione quando si dice a = Range("Test")
Quando si tenta di archiviare il valore da un intervallo contiguo a una variabile Variant, ad esempio, il range di intervallo Test
rs per dire, A1:A10
, quindi si otterrà un array di valori
Sub Sample()
Dim Myar
Myar = Range("A1:A10").Value
Debug.Print UBound(Myar)
End Sub
Anche in questo caso Myar = Range("A1:A10").Value
è lo stesso di Myar = Range("A1:A10")
Se sto lettura/scrittura ad un intervallo, quando fare Uso solo il nome dell'intervallo e quando è necessario utilizzare range.value?
io non sono sicuro di cosa si intende per when do I just use the range name
, ma non importa se si utilizza .Value
o no quando si sta leggendo/scrittura da/a una serie. IMHO, è una buona pratica usare .Value
:)
Indica se l'intervallo è una cella o più celle?
No, non importa anche in questo caso se si utilizza .Value
o no.
È importante quale sia il tipo di variabile?
Oh sì! Vedere l'esempio di array sopra
Oppure il tipo di dati nell'intervallo?
Le celle di Excel possono memorizzare vari tipi di dati. Dai numeri alle date alle stringhe. Poiché non sai cosa può essere quel tipo, è consigliabile che quando si lavora con loro, utilizzare Variant
. Ecco un esempio classico
Diciamo cella A1
ha questo numero 123456789
Ora provate questo codice
Sub Sample()
Dim someVariable As Integer
someVariable = Range("A1").Value
Debug.Print someVariable
End Sub
Ed ora provate questo
Sub Sample()
Dim someVariable As Variant
someVariable = Range("A1").Value
Debug.Print someVariable
End Sub
Edit:
Come già detto da Tim Williams
Utilizzando .Value è utile anche a "dis-ambiguate" il comune "dimenticato di utilizzare Set quando si assegna una variabile oggetto" problema - Dim un: Set a = Range ("A1") vs Dim a: a = Intervallo ("A1") Nel secondo caso utilizzando sempre .Value chiarisce il problema reale -
Nice one Siddharth. Mi piace anche esplicitamente '.Value' dal momento che aiuta i principianti a leggere il codice e aiuta a differenziare il vecchio nugget' .Value2' (vedi qui Raghu http://stackoverflow.com/questions/17359835/what-is-the-difference -tra-valore-testo-e-valore2) – CuberChase
Grande roba Siddharth :) Per completare quanto sopra, se sei più simile a me di Siddharth, quindi usare qualifiche come .value, anche quando non strettamente necessario, ti aiuterà a mantenere tenere traccia dei dati che si desidera acquisire e risolvere i problemi quando si verificano errori di mancata corrispondenza del tipo. Preferisco anche evitare l'uso di Variant per lo stesso motivo (e per il vantaggio estremamente minore di usare meno memoria). Ovviamente se sei cresciuto periodicamente facendo questi errori direi che il consiglio di Siddharth è la strada da percorrere. – puzzlepiece87
L'uso di '.Value' è anche utile per" disambiguare "il comune" ha dimenticato di usare Imposta durante l'assegnazione di un oggetto variabile "problema -' Dim a: Imposta a = Intervallo ("A1") 'vs' Dim a: a = Range ("A1") 'Nel secondo caso, sempre usando' .Value' chiarisce il problema reale –