我有一个类似foreach (ListItem li in chkCompanies.Items)
{
li.Attributes.Add("Style", "border: solid 1px black;");
}
的声明,数字被声明为number= InputBox("Number for:", "Number:")
但是当我输入一个双数字,例如 5.4 时,进入输入框并将其传输到单元格,单元格显示 54 ,它删除了该点。
我该如何解决这个问题?
THX
答案 0 :(得分:3)
如果您想要检测Excel用于 十进制分隔符 的设置,请尝试以下代码:
Patch
如果您想将其更改为DeltaConfig.Init((cfg) =>
{
cfg.ExcludeProperties<Todo>(x => x.id);
});
,请使用以下行:
MsgBox "Excel uses " & Chr(34) & Application.DecimalSeparator & Chr(34) & " as a decimal seperator"
答案 1 :(得分:1)
不幸的是,VBA在处理十进制分隔符的差异方面非常糟糕。在您的情况下,您应该使用逗号(,
),而不是标点符号/点(.
)。
修改:使用Application.DecimalSeparator
方法,无论区域设置如何,它现在都可以使用。但请注意,如果更改Excel的逗号分隔符设置似乎会导致一些问题(似乎VBA在某种程度上忽略了此设置)。但是,如果不进行更改,则该示例应该适用于所有其他cas
Sub GetNumberFromInputBox()
Dim val As String
Dim num As Double
'Get input
val = InputBox("Number for:", "Number:")
Debug.Print Application.DecimalSeparator
If IsNumeric(val) Then
'Try to convert to double as usual
num = CDbl(val)
'If the dot is removed automatically, then
'you will se a difference in the length. In
'those cases, replace the dot with a comma,
'before converting to double
If Len(val) <> Len(num) Then
If Application.DecimalSeparator = "," Then
num = CDbl(Replace(val, ".", ","))
Else
num = CDbl(Replace(val, ",", "."))
End If
End If
'Pring the number
Debug.Print "You selected number: " & num
Else
'If its not a number at all, throw an error
Debug.Print "You typed " & val & ", which is not a number"
End If
End Sub