Formatta una cella come valuta arbitraria indipendentemente dalla locale, utilizzando VBA

Questo mi stava molto colpendo perché sembra abbastanza illogico come funziona.

Ho una macro per formattare una cella come valuta utilizzando un po 'di codice per get il simbolo di valuta.

Ecco il codice coinvolto:

Dim sym As String sym = reportConstants(ISOcode) 'Just use the ISO code if there isn't a symbol available If sym = "" Then sym = ISOcode End If With range(.Offset(0, 3), .Offset(3, 3)) .NumberFormat = sym & "#,##0;(" & sym & "#,##0)" Debug.Print sym & "#,##0;(" & sym & "#,##0)" End With 

reportConstants è un object dictionary con simboli di valuta definiti come stringhe. Ad esempio, reportConstants("USD") = "$" . Questo è definito in precedenza nella macro.

Quando la macro viene eseguita, ottiene il codice ISO e deve quindi formattare la cella con il simbolo di valuta corrispondente.

Quando l'ho eseguito in un istante il codice ISO è "USD" – per cui sym è definito "$" – ma ancora forma la cella con un segno di sterline (£). Quando debug.print la string di cella di formato mostra $#,##0;($#,##0) così, finché ho ottenuto la mia syntax corretta, dovrebbe utilizzare un segno di dollaro nella cella. Ma utilizza invece un simbolo £. (Sto eseguendo una versione britannica dell'eccellenza, per cui può essere imputata a £ -sign, ma perché?)

Qualsiasi aiuto è molto apprezzato.

Ho appena registrato una macro per impostare il formato su $ xx.xx e ho creato questo: [$$-409]#,##0.00 . Sembra che il -409 localizza la valuta in un determinato paese; funziona senza di essa – provate a cambiare il tuo file in .NumberFormat = "[$" & sym & "]#,##0.00"

Credo di leggere la tua domanda in qualche modo dopo la pubblicazione;) Excel è ben influenzato dalle impostazioni regionali del computer per valuta, lingua, date … L'utilizzo di numerformat può costringerlo a mantenere il segno che si desidera. se si tratta di un arrotondamento si può provare a: In Excel 2010, andare a File – Opzioni – Avanzate e scorrere fino a "Quando si calcola questa cartella di lavoro" e fare clic sulla "precisione impostata come visualizzato" e su OK.

Prova questo: dato che i tuoi valori sono numbers / interi / decimali ….

Range("a2").Style = "Currency"

Oppure puoi utilizzare il formato:

Format(value, "Currency")

Format(Range(a2).value, "Currency")

Riferimenti:

http://www.mrexcel.com/forum/excel-questions/439331-displaying-currency-based-regional-settings.html

http://www.addictivetips.com/microsoft-office/excel-2010-currency-values/

(PS: Sono sul cellulare, puoi provare questi due link)