我知道标题听起来很奇怪,所以我将从屏幕截图开始:
正如您所看到的,问题是当我在用户窗体中查找 ID 时,点突然变为逗号。
在调用信息之前,我会相当简单地保存所有信息:
with ws
Range("BH" & lastRow).value = Me.payinfoOnTime
Range("BI" & lastRow).value = Me.payinfo30
Range("BJ" & lastRow).value = Me.payinfo60
Range("BK" & lastRow).value = Me.payinfo90
Range("BL" & lastRow).value = Me.payinfo90more
End with
调用搜索到的 ID 的相应信息是通过以下方式完成的:
Set FoundRange = ws.Range("D4:D500").Find(What:=Me.SearchSuppNo, LookIn:=xlValues)
With ws
Me.SEpayinfoontime = FoundRange.Offset(0, 56)
Me.SEpayinfo30 = FoundRange.Offset(0, 57)
Me.SEpayinfo60 = FoundRange.Offset(0, 58)
Me.SEpayinfo90 = FoundRange.Offset(0, 59)
Me.SEpayinfo90more = FoundRange.Offset(0, 60)
end with
问题是,后来的分数计算取决于这些文本框,并且我不断收到错误,除非我总是手动将逗号更改回点。
有什么想法可以解决这个问题吗?
最佳答案
行:
Me.SEpayinfoontime = FoundRange.Offset(0, 56)
Me.SEpayinfoontime.Value = FoundRange.Offset(0, 56).Value
当您使用 .Value
属性(键入 As Variant
)填充 MSForms.TextBox
时,就像您隐式执行的那样,并提供右侧的数字,编译器将值作为数字传递给 TextBox
,然后该值在 TextBox
内部自动转换为字符串。
这种转换的具体发生方式似乎没有记录,从实验来看,它似乎存在问题。
当您刚刚启动 Excel 时,即使您的系统区域设置不同,分配 .Value
也会使用 en-us
区域设置转换数字。但是,一旦您进入控制面板并将当前区域设置更改为其他设置,.Value
就会开始遵循系统区域设置,并根据当前选择的内容更改其结果。
这不应该发生,我会将其视为 Excel 错误。
但是,如果您改为分配 .Text
属性,则数字将使用当前系统小数点转换为字符串,并且该转换发生在 TextBox
之外,因为编译器知道 .Text
是一个字符串,因此它预先将右侧数字转换为字符串。
所以在你的情况下我会:
确保我始终显式使用
.Text
属性:Me.SEpayinfoontime.Text = ...
确保我明确使用正确类型的函数在文本和数字之间进行转换:
Me.SEpayinfoontime.Text = CStr(FoundRange.Offset(0, 56).Value) MsgBox CInt(Me.SEpayinfoontime.Text) / 10
尽管此步骤是可选的并且代表了我个人的偏好。鉴于它是位于赋值左侧的
字符串
,VB 将自动使用CStr
。转至 Excel 设置,确保已勾选“使用系统分隔符”。
- 检查控制面板 - 语言和区域设置中选择的区域设置。
- 如果不是
En-Us
,我会选择En-Us
以确保小数点分隔符是一个点。
- 如果不是
- 重新启动 Excel。
关于excel - 数据库中的 VBA 点作为逗号加载到文本框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39270232/