导出数据后,我有CSV,其数字类似; ,34 ; ,6483
(理解为0,34
或0,6483
)。使用Excel 2010时,我可以强制转换CDbl(",34")
,但效果很好,但是在Excel 2016中,它表示存在不匹配问题。我在这里是因为我无法找出问题所在。
已经更改了小数点分隔符,不起作用。
Dim arreglo() As String
'... filling the array...
arreglo(R, C) = one_line(C)
CDbl(arreglo(R, C)) '<--------------------
在Excel 2010中确定
Excel 2016中不匹配
答案 0 :(得分:0)
我认为这不是Excel 2010和2016之间的区别,而是小数点分隔符的问题,该问题是在操作系统或Excel本身中设置的。因此,请确保小数点分隔符与CSV中使用的分隔符匹配。
例如,如果CSV使用逗号,则...
Application.DecimalSeparator
更改为与CSV中使用的相同。所以会是这样:
Sub ImportCSV()
'remember original state of decimal separator
Dim OriginalUseSystemSeparators As Boolean
OriginalUseSystemSeparators = Application.UseSystemSeparators
Dim OriginalDecimalSeparator As String
OriginalDecimalSeparator = Application.DecimalSeparator
'change it to what you need for your CSV
Application.UseSystemSeparators = False 'necessary otherwise next line is without effect!
Application.DecimalSeparator = "," 'must match CSV decimal separator
On Error Goto REVERT_DECIMAL 'in case of error we want to rever the old state
'your code here
MsgBox CDbl(",34") 'this should work now!
'no Exit Sub here!
REVERT_DECIMAL:
'revert it after
Application.UseSystemSeparators = OriginalUseSystemSeparators
Application.DecimalSeparator = OriginalDecimalSeparator
If Err.Number <> 0 Then
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
End If
End Sub
请注意,使用这种方法不必转换任何数字。如果您将CSV导入我写过'your code here
的位置,则它现在应该会自动将数字识别为数字,因为小数点分隔符会将CSV文件中的数字匹配。