2016-03-01 15 views
5

fanno ho capito bene, che se uso un comando comeLingue diverse problema durante l'inserimento formula da VBA

Set myRange.formula = “=ROW(mySheet!R12)” 

mia macro causerà #NAME? errore compare nelle cellule se viene eseguito su, diciamo, Russo Excel. mi dire che in questo caso la formula di cui sopra dovrebbe essere codificata come

Set myRange.formula = “=СТРОКА(mySheet!R12)” 

dove СТРОКА è l'analogo russo della funzione SUM. Non vorrei che Excel fosse abbastanza intelligente da tradurre le formule in fase di esecuzione. Quindi c'è un modo per aggirare questo e, cosa più importante, qual è il codice più generico per far funzionare correttamente la macro indipendentemente dalla lingua?

risposta

10

VBA è molto IT-USA-centrico. VBA .Formula e .FormulaR1C1 si aspettano il ROW function. Per utilizzare i "sapori" della lingua regionale come СТРОКА, è necessario utilizzare invece lo Range.FormulaLocal property o lo Range.FormulaR1C1Local property.

Lo stesso vale per i caratteri separatori di elenchi. Utilizzare una virgola (ad esempio ,) per separare gli argomenti in una funzione quando si utilizza .Formula o .FormulaR1C1 indipendentemente dalle impostazioni internazionali del sistema. Se il sistema utilizza un punto e virgola (ad esempio ;) come carattere separatore di elenco, questo deve essere utilizzato solo con .FormulaLocal o .FormulaR1C1Local.

Il risultato sul foglio di lavoro rifletterà correttamente le impostazioni della lingua dell'installazione di Office.

myRange.Formula = "=ROW(mySheet!$12:$12)" 
myRange.FormulaR1C1 = "=ROW(mySheet!R12)" 
myRange.FormulaLocal = "=СТРОКА(mySheet!$12:$12)" 
myRange.FormulaR1C1Local= "=СТРОКА(mySheet!R12)" 
+0

Quindi, ho capito bene, che l'uso di .FormulaLocal renderà il mio codice assolutamente vitale e non dipendente dal sistema languange? –

+0

Allora perché abbiamo bisogno del metodo. Qualunque cosa sia?)) E perché non integrano semplicemente la funzionalità di .FormulaLocal nel metodo .Formula?)) Stranamente –

+0

Sì, dovrebbe. Tutto ciò che è necessario sarebbe assicurarsi di utilizzare [.FormulaLocal] (https://msdn.microsoft.com/en-us/library/office/ff838851.aspx) o [.FormulaR1C1Local] (https://msdn.microsoft.com/en-us/library/office/ff838568.aspx) in modo appropriato. Il riferimento a 'R12' nel tuo campione era un po 'ambiguo; Spero di aver indovinato correttamente. Inoltre, tutte le virgolette all'interno della formula devono essere raddoppiate poiché saranno all'interno di una stringa quotata. per esempio. '=" abc "' diventa '.FormulaLocal =" = "" abc "" "'. – Jeeped