Я использую последнюю официальную версию Excel (Office 365, Excel версия 1812) с региональными настройками Швеции, и это работает для меня:
Dim myCell As Range
Set myCell = ActiveSheet.Range("A1")
myCell.Value = CDbl(9999.999)
Application.DecimalSeparator = "."
Application.UseSystemSeparators = False
myCell.NumberFormat = "0.00"
Debug.Print "Cell Value: " & myCell.Value '9999,999
Debug.Print "Cell Text: " & myCell.Text '10000.00
Я ожидаю, что вышеприведенное будет работать для любой версии Excel, которая поддерживает этот код, но в случае, если вам нужно обойти это, вы всегда можете сделать это:
Сначала получите десятичный разделитель из региональных настроек Windows:
Dim myShell, regDecSep
Set myShell = CreateObject("WScript.Shell")
regDecSep = myShell.RegRead("HKCU\Control Panel\International\sDecimal")
Debug.Print "System decimal separator: " & regDecSep
Затем при обработке листа проверьте, какой тип значения находится в текущей ячейке, и, если он числовой, используйте функцию Replace
, чтобы исправить разделитель:
Dim cellText
cellText = myCell.Text
If regDecSep <> "." Then
If TypeName(myCell.Value) = "Double" Then
Debug.Print "Replacing the decimal separator"
cellText = Replace(cellText, regDecSep, ".")
End If
End If
Debug.Print "Result: " & cellText
(Обратите внимание, что при проверке типа вам нужно использовать Value
ячейки вместо Text
)