VBA 来自数据库的点作为逗号加载到文本框中

VBA dots from database get loaded into textbox as comma

我知道标题听起来很奇怪,所以我将从截图开始:

如您所见,问题是当我在用户窗体中查找 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)

is in fact:

Me.SEpayinfoontime.Value = FoundRange.Offset(0, 56).Value

当您使用 .Value 属性(键入 As Variant)填充 MSForms.TextBox 时,就像您隐含地做的那样,并在右侧提供一个数字,编译器将值作为数字传递给 TextBox,然后在 TextBox.

中自动将值转换为字符串

这种转换是如何发生的,似乎没有记录在案,而且从实验来看,它似乎存在问题。

当您刚开始 Excel 时,似乎分配 .Value 会使用 en-us 区域设置转换数字,即使您的系统区域设置不同。但是,一旦您转到“控制面板”并将当前区域设置更改为其他区域,.Value 就会开始遵守系统区域设置,并根据当前 selected 更改其结果。

它不应该发生,我会将其视为 Excel 错误。


但是,如果您改为分配 .Text 属性,则使用当前系统小数点将数字转换为字符串,并且该转换发生在 TextBox 之外,因为编译器知道 .Text 是一个字符串,所以它预先将右边的数字转换为字符串。

所以在你的情况下我会:

  • 确保我始终明确使用 .Text 属性:

    Me.SEpayinfoontime.Text = ...
    
  • 确保我明确使用正确类型的函数在文本和数字之间进行转换:

    Me.SEpayinfoontime.Text = CStr(FoundRange.Offset(0, 56).Value)
    
    MsgBox CInt(Me.SEpayinfoontime.Text) / 10
    

    尽管此步骤是可选的并且代表我个人的喜好。鉴于它是赋值左侧的 string,VB 将自动使用 CStr

  • 转到 Excel 的设置以确保 "Use system separators" 勾已设置。

  • 检查在“控制面板”-“语言和区域设置”中 select编辑的语言环境。
    • 如果不是 En-Us,我会 select En-Us 以确保小数点分隔符是一个点。
  • 重启Excel.