2017-05-09 20 views
2

我在VBA中有一個Excel宏。昨天一切正常,今天早上VBA取小數點,並將點改爲逗號。那是從5.1到5.1。我正在使用德語系統,並在Excels高級選項中設置了一個點,它是小數,逗號是數千。VBA將小數更改爲逗號自動生成

例如,我有在3.75

Excel表格輸入,用於在Excel表單組每日Scrum會議的值:
​​

當我使用的函數的值來讀取諸如

Sub TestFunction() 
    MsgBox (Sheets("Input_Parameters").Cells(25, 2)) 
End Sub 

我用逗號獲得值。

VBA函數輸出:
output

是否有VBA環境來解決這個設置還是有我丟失的東西。我所有的宏備份都顯示出相同的影響,所以我知道它在今天版本中的代碼中沒有改變。

感謝您的幫助。

+0

你是什麼意思,「* VBA正在取小數點,並將點改爲逗號。*」?在VBA中,即使在德國系統中,也只能使用該點作爲十進制「a = 5.3」。你能否顯示你的代碼([編輯]問題並添加它)? –

+0

我知道這是一個奇怪的問題。調用一個單元格時發生在多行上。例如 SpNum =(將細胞(TargVerFirstRow表( 「Input_Parameters」)。+ 1,4)) 在Excel單元是29.29但在VBA代碼和出把我得到29,2857 .... – Dave

+0

請不要」 t使用註釋添加代碼使用[編輯]按鈕編輯您的問題。添加*完整示例*並描述您的代碼實際執行的操作以及您希望執行的操作。沒有任何解釋,如果您發佈了一段神祕的代碼,沒有人能提供幫助。如果這有助於你解釋,也可以添加屏幕截圖來顯示最新的錯誤。你的問題很不清楚。 –

回答

3

這是使用德語默認語言環境Windows設置(逗號作爲小數點分隔符並指向千分表的Windows設置)的德語系統的正常行爲。

MsgBox .Cells(25, 2).Value 

返回格式爲Windows語言環境默認值的值。

您在Excel選項中設置的Application.DecimalSeparator會影響單元格中顯示的內容,但不影響消息框顯示的內容。

因此,你可以使用

MsgBox .Cells(25, 2).Text 

返回格式類似於單元格中的數值爲文本。


另一個解決方法是用replace()功能來取代逗號:

MsgBox Replace(.Cells(25, 2).Value, ",", ".") 
+0

這確實是問題。將值作爲字符串輸出,將點轉換爲逗號。最後的值是寫,但逗號應該是一個點。謝謝 – Dave

1

一個我創建的第一個功能,以後我來到德國是這一個:

Public Function change_commas(ByVal myValue As Variant) As String 

    Dim str_temp As String 

    str_temp = CStr(myValue) 
    change_commas = Replace(str_temp, ",", ".") 

End Function 

自從最近2年以來,它就出現在每個VBA項目中。儘管我已經改變了我寫函數名稱和變量的風格,但是這個風格仍然存在。