2015-07-09 26 views
7

Ho questo codice e la mia domanda è, funzionerà sulla versione inglese di Excel? Intendo che le formule locali funzioneranno sulla versione inglese di Excel? (ORAZ significa E nella mia lingua).Difficoltà nella lingua VBA di Excel

Quando inserisco ORAZ funziona solo sul mio PC, ma su PC inglese no, quando inserisco E non dà errore ma non funziona, qualche idea su come aiutarmi?

With Range("$H$6:$FH$50").FormatConditions _ 
.Add(xlExpression, xlFormula, "=ORAZ(H$7<=$G$7,(H$7+7)>$G$7)") 
With .Interior 
    .PatternColorIndex = xlAutomatic 
    .ThemeColor = xlThemeColorLight2 
    .TintAndShade = 0.799981688894314 
End With 
End With 
+1

Test per la versione di Excel quindi eseguire il codice appropriato. Un po 'come test per 64 bit. – findwindow

+1

In questo caso particolare, modifica la formula in "" = (H $ 7 <= $ G $ 7) * ((H $ 7 + 7)> $ G $ 7) "" ed evita del tutto i problemi linguistici. – Jeeped

+2

Si consiglia inoltre di dare un'occhiata alla [proprietà Range.FormulaLocal] (https://msdn.microsoft.com/en-us/library/office/ff838851.aspx) e utilizzarla al posto di [.Formula proprietà] (https://msdn.microsoft.com/en-us/library/office/ff838835.aspx). Se usi '.Formula = ...' allora * sempre * sarà 'AND', non' ORAZ'. – Jeeped

risposta

0

ho provato nel mio (Brazilian Portuguese) Excel 2013 e ha scoperto che, in effetti, FormatConditions.Add() aspetta che il suo formule nel versione localizzata. Non capisce le "formule canoniche" come Range.Formula.

Il seguente dovrebbe funzionare, anche se il metodo adottato per convertire la formula non è la più adeguata mai:

Dim temp As Range 

' The temp cell is just for translating our formula. 
' Set it to some cell your sheet will never use. 
Set temp = ActiveSheet.Range("Z1000") 
temp.Formula = "=AND(E$1<=$E$2,(E$1+2)>$E$2)" ' use English formula here 

With Range("$A$1:$D$4").FormatConditions _ 
    .Add(Type:=xlExpression, Formula1:=temp.FormulaLocal) 

    With .Interior 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorLight2 
     .TintAndShade = 0.799981688894314 
    End With 
End With 

Call temp.Clear ' do away with the temp cell 

Nota che ho anche tolto l'inutile xlFormula argomento della chiamata .Add(), ed esplicitata la nomi di parametri opzionali.

Inoltre, dopo aver scoperto che questa domanda è un duplicato di this e this.

1

Il problema è che si sta semplicemente inserendo un testo all'interno di una cella, quindi funzionerà solo se Excel è impostato per quella lingua. Invece si può assegnare la funzione del foglio di lavoro dal codice VBA in questo modo:

ActiveCell = WorksheetFunction.And(H$7<=$G$7,(H$7+7)>$G$7) 

In questo modo si tradurrà Excel la formula per la lingua corrente che l'utente ha impostato.