2015-07-09 47 views
7

我有這個代碼,我的問題是,它會在英文版的Excel中工作嗎?我的意思是當地的公式可以用於英文版的excel? (ORAZ的意思是和我的語言)。Excel VBA語言難點

當我把ORAZ它只適用於我的電腦,但在英語電腦它不,當我把它並沒有給錯誤,但它不工作,任何想法如何幫助我?

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

測試Excel的版本,然後根據需要執行代碼。有點像64bit的測試。 – findwindow

+1

在這種特殊情況下,將公式更改爲'「=(H $ 7 <= $ G $ 7)*((H $ 7 + 7)> $ G $ 7)」',並完全避免語言問題。 – Jeeped

+2

您可能還想查看[Range.FormulaLocal屬性](https://msdn.microsoft.com/en-us/library/office/ff838851.aspx),並使用它來代替[.Formula性質](https://msdn.microsoft.com/en-us/library/office/ff838835.aspx)。如果你使用'.Formula = ...',那麼它總是*是'AND',而不是'ORAZ'。 – Jeeped

回答

0

我在(巴西葡萄牙語)的Excel 2013測試發現,的確,FormatConditions.Add()預計其在公式本地化版本。它不明白像Range.Formula那樣的「規範公式」。

以下應該工作,即使用來轉換公式的方法是不是最合適的永遠

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 

請注意,我也去掉了.Add()通話的無用xlFormula參數,explicited的可選參數名稱。

此外,事後我發現這個問題是thisthis的重複。

1

問題是,您只是在單元格中插入文本,所以只有在爲該語言設置了excel的情況下才能使用。相反,你可以指定從VBA代碼的工作表函數是這樣的:

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

這樣Excel將轉換公式爲當前語言的用戶已成立。