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

标签 excel userform decimal-point vba

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

正如您所看到的,问题是当我在用户窗体中查找 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 就会开始遵循系统区域设置,并根据当前选择的内容更改其结果。

这不应该发生,我会将其视为 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/

相关文章:

java - 使用 Apache Poi 读取内部存储中的 excel xlsx 文件

Excel-如何查找从某些值开始的平均值?

php - 在 PHP 中显示 MySQL 执行时间

floating-point - 一般编程 : Decimal numbers, float

excel:如何将概率与 "or"结合起来?

c# - ClosedXML - 设置单元格的数据类型不起作用

vba - 按下 'red x'时如何使Excel VBA中的用户窗体记住密码

excel - 在模块中调用 UserForm_Initialize()

Excel-VBA : pass variable from Sub to Userform

python - pandas to_csv 参数 float_format 和 decimal 不适用于索引列