2016-04-05 31 views
5

Con qualsiasi valore di testo, posso formattare singolarmente ciascun carattere e quindi copiare quella formattazione in un'altra cella eseguendo un iterazione sulla raccolta Range.Characters().Perché le celle numeriche non hanno una proprietà .Characters()?

Tuttavia, se la cella è un numero (anche se il numeroFormattazione lo visualizza come una stringa per esempio date), quindi non espone una proprietà .Characters() e, infatti, non può essere formattata in modo selettivo cifra per cifra.

Perché Excel visualizza le stringhe utilizzando gli oggetti caratteri ma non i numeri, anche quando il numero viene visualizzato come stringa?

+0

Se il numero è formattato come testo (ad esempio * 'visualizzato come una stringa' *), è possibile formattare singoli caratteri/cifre. Se è formattato come un numero, 10 non è 10, è 0A. – Jeeped

+0

@Jeeped Ho capito che il testo può essere formattato come una serie di caratteri. Quello che pensavo ** era che gli oggetti di Characters() erano usati come uno strato di presentazione (specialmente per cose come i valori di date visualizzati come date scritte). per qualsiasi valore, ma apparentemente non per i numeri. Sto solo cercando di scoprire che cosa è ** in realtà ** in corso. – Kaz

+5

La verità potrebbe spaventarti. Puoi prendere la pillola blu e vedere un oggetto 'Range' con proprietà magiche, oppure puoi prendere la pillola rossa, il faceoff con COM e il modello di oggetto Excel" reale ", e vedere quanto è profonda la tana del coniglio. Mi è piaciuta la pillola blu. –

risposta

1

Se si vuole andare in giro questo, si può procedere come segue:

Nella cella A1 put '123456 con il "'" segno di fronte. Quindi scrivere

range("A1").Characters(1,3).Font.Bold = true 

sarebbe solo i primi tre numeri, non tenendo conto del "'" segno. Pertanto, il numero è un po 'come una stringa, ma puoi ancora utilizzarlo per esempio. A1 + 4 darebbe 123460.

+0

Apprezzo il suggerimento, ma non sono interessato a soluzioni alternative, ma a capire ** perché ** sono diverse e ciò che sta effettivamente accadendo "sotto il cofano" per causare la differenza. – Kaz

+0

L'idea è che un numero è sempre un numero nella cella, anche quando è formattato in modo che assomigli al testo. A VBA non interessa come appare in Excel in questo caso: sa che è un numero e quindi non può avere Range. Caratteri. Per un motivo simile non puoi nominare una variabile, a partire dal numero in VBA, ad es. 123_my_variable. – Vityata