2016-05-20 84 views
4

我有以下代碼:麻煩與數字格式

Dim tarifa As Double 
tarifa = Sheets("OD Tarifa").Cells(fila, 5 + r).value 
Cells(j, r + 10).FormulaR1C1 = _ 
       "=" & tarifa & "-" & "SUMIF(C[-6],RC[-6],C[-3])+SUMIF(C[-6],RC[-6],C[-2])+SUMIF(C[-6],RC[-6],C[-1])" 

tarifa使用逗號作爲小數分隔(1,5-例如)保存,所以當VBA嘗試寫入該式中,它會引發錯誤。如果我手動將tarifa替換爲1.5,則不會出現錯誤。我能做些什麼來解決這個問題?

回答

0

如何我終於解決了這個問題:

Dim tarifa As Double 
tarifa = Sheets("OD Tarifa").Cells(fila, 5 + r).value 
Cells(j, r + 10).FormulaR1C1 = _ 
       "=""" & CStr(tarifa) & """-" & "SUMIF(C[-6],RC[-6],C[-3])+SUMIF(C[-6],RC[-6],C[-2])+SUMIF(C[-6],RC[-6],C[-1])" 
1

如果在Excel 2013或更高版本中,請嘗試使用NUMBERVALUE函數。它允許您在您正在閱讀的數字中指定小數點和千位分隔符。我認爲它會在這裏工作,讓您從逗號十進制分隔符切換到VBA希望時期:

tarifa = worksheetfunction.NumberValue(Sheets("OD Tarifa").Cells(fila, 5 + r).value,",",".") 

如果這是不適用的,你應該能夠有一個查找修復和替換:

tarifa = replace((Sheets("OD Tarifa").Cells(fila, 5 + r).value,",",".") 
+0

這可能有效,但我最終通過用CStr(tarifa)替換tarifa來解決它。 –

2

一種方法是使用的FormulaR1C1Local代替FormulaR1C1

Dim tarifa As Double 
tarifa = Cells(1, 2).Value 
Cells(2, 2).FormulaR1C1Local = "=" & tarifa 
+0

公式的語法也錯了。 –

+0

這不起作用,因爲Excel文件的原始語言不是英語,因此它不承認公式(因爲它們是英文的)。我通過用CStr(tarifa)替換tarifa來解決它。 –