In Excel VBA, Range("A1").Value
deve restituire il valore sottostante dell'intervallo A1 sul foglio di lavoro. Ma sto ottenendo un valore diverso se la cella è formattata come Contabilità.VBA di Excel: valore della cella, indipendente dalla formattazione della cella
Come ottengo il valore reale sottostante della cella?
Foglio
Fai un nuovo documento, immettere i seguenti valori nelle celle:
- A1: 0.00001
- A2: = A1
- A3: = A1 = A2
Come ci si aspetterebbe, A3 risulta in TRUE
. Ora modifica la formattazione di A2 in Contabilità, utilizzando 2 posizioni decimali. A2 ora legge $ 0.00
, ma il valore sottostante è ancora 0.00001
, quindi A3 è ancora TRUE
.
VBA
Fai un nuovo modulo e aggiungere la seguente funzione:
Function f(addr As String)
f = Range(addr).Value
End Function
Come si può vedere, questo appena ottiene il valore di un intervallo utilizzando il metodo dell'oggetto Range
Value
.
Foglio
Torna al foglio di lavoro. Immettere i seguenti valori:
- B1: = f ("A1")
- B2: = f ("A2")
- B3: = B1 = B2
A1
e A2
avere lo stesso valore sottostante, ma non lo sono B1
e B2
, anche se sono entrambi calcolati utilizzando il metodo Value
di A1
e A2
.
L'espressione in A3
(=A1=A2
) sta accedendo al valore sottostante effettivo di A1
e A2
. Come posso accedere a questi valori in VBA?
Sto usando Excel 2010 e 'B3' è sicuramente in arrivo' FALSE'. – Joe
Indovina che non si ricalcola se si modifica solo la formattazione ... –