vba - 将文本转换为数字的宏会产生不一致的结果
问题描述
我的个人工作簿中有一个宏,我用它来将文本转换为数字,因为数据加载到我们的一个 SQL 服务器时存在一些问题。问题是它产生了不一致的结果。代码是:
Sub ConvertTextToNumber()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim DataRange As Variant
Dim r As Range
Dim i As Long
Dim lrow As Long
Dim lcol As Integer
Dim MyVar
DataRange = Range("A1:FZ6000").Formula
For lrow = 1 To 6000
For lcol = 1 To 156
MyVar = DataRange(lrow, lcol)
If IsNumeric(MyVar) Then
MyVar = Val(MyVar)
DataRange(lrow, lcol) = MyVar
End If
Next lcol
Next lrow
Range("A1:FZ6000").Formula = DataRange
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
大多数情况下这是有效的;但是,我今天注意到一些格式化为文本的值没有正确转换。
CellQ33
的值为 ,105,238
CellQ35
的值为689,563
。当我运行宏时,这两个单元格被转换为零。我打开了一个新工作簿来测试这个问题,放入'128,899
CellA1
以便将其格式化为文本,运行我的宏,然后将其转换为128
.
考虑到返回值的差异,我找不到导致它的原因或原因,我希望有人有更好的方法或以前处理过这个问题。
感谢你们提供的任何帮助!
解决方案
您已经知道范围Range("A1:FZ6000")
,我不知道您为什么要设置lrow
,lcol
而且第 156 列是 EZ 列而不是 FZ。话虽如此,您不必遍历所有列,下面是将文本转换为数字的简单方法。
With Range("A1:FZ6000")
.NumberFormat = "General"
.Value = .Value
End With
推荐阅读
- jquery - Laravel 中的 jQuery/AJAX 多文件上传
- sql - 从宏查询(加入)外部工作簿
- jquery - 我可以将 Ajax 与 asp.net 4.5 .NET Framework FileUpload 控件一起使用来上传多个文件吗?
- javascript - 仅从 firebase 实时数据库中获取当前用户数据
- dynamics-crm - 计算与该特定公司相关的每个人的其他关系
- testing - 跨多个内核测试内核模块
- excel - 如果超过 1 个选项,则自动填充/带有数据验证的下拉列表
- lua - 最后在lua中重写表
- c++ - c++ bad_alloc 异常没有被捕获
- node.js - 猫鼬储蓄