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.
我知道标题听起来很奇怪,所以我将从截图开始:
如您所见,问题是当我在用户窗体中查找 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
,我会 selectEn-Us
以确保小数点分隔符是一个点。
- 如果不是
- 重启Excel.