vba Excel访问: zero length string to Null number

标签 vba excel

我在 Excel 的同一列中有两个值。我选择其中之一并运行以下命令:

Debug.Print IsNumeric(Selection), _
            VarType(Selection), _
            VarType(Trim(Selection)), _
            ">" & Selection.Value & "<", _
            Len(Trim(Selection)), _
            Len(Selection), _
            Selection.NumberFormat

然后我选择另一个并运行相同的调试。

我明白了:

  • 正确、5、8、>9.46979663546499<、16、16、一般
  • 假、8、8、><、0、0、一般

注意:该列多次出现这两者

  1. 有人可以解释一下吗?我已经使用 vba 和 Excel 很长时间了,但我仍然不明白(详细)Excel 的数字格式以及如何最好地使用它们。我想我已经有了它,然后我总是会偶然发现这样的新东西。
  2. 在这种情况下,我的目标是让 MS Access 自动理解该列是 double /数字/浮点/任何列,当我导入它时可以为 NULL 并且不会抛出错误。我必须在导入之前通过在 Excel 中格式化/更改它来实现此目的。 (部分是因为这最适合我客户的流程,部分是因为我想最终解决这个问题......不敢相信我还没有!)我有超过 2000 行需要更改每列,所以一个解决方案最好一次格式化整个列,而不是一次只格式化一个单元格。

谢谢!

最佳答案

IsNumeric 对于数字返回 true,对于空白返回 false。我不确定这是否是意外的,但微软必须让它返回其中之一。逻辑是空白既不是数字也不是文本。

Vartype 返回 Double 作为数字(如预期)。如果我输入一个空单元格 VarType,我会得到 vbEmpty (0),而不是您得到的 8 (Excel 2010 x86)。如果我在单元格中添加一个撇号,我会得到与您相同的结果。

当您 Trim() 某些内容时,您将其转换为文本。无论您修剪什么,Trim 函数都只返回一个字符串,因此您将始终得到 VarType 8。

阅读这篇有关混合数据类型的文章 http://dailydoseofexcel.com/archives/2004/06/03/external-data-mixed-data-types/ 。请务必阅读评论。

当 Office 程序导入时,它使用一些注册表项来确定数据类型。通常,它读取字段的前 8 行来确定数据类型。如果它看到混合的数据类型,它会选择大多数并转换或忽略其他所有内容。您可以更改注册表设置以查看超过 8 行或将所有内容默认为文本,但您不能告诉它将空单元格视为数字。

如果它能够简单地忽略空单元格并占据其余的大部分,那就太好了。但“空单元格”并不是 Excel 之外的概念,因此我并不感到惊讶。

我认为,对您来说正确的答案是创建一个架构文件并将其放在与您要导入的文件相同的目录中。阅读 https://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx这本质上是在文件中设置所有列数据类型。

我几乎每天都在 Excel VBA 中使用它 - 我使用 VBA 创建 Schema.ini 文件,then use ADO to read in the file 。我从未在 Access 中使用过此功能,尤其是通过 UI 导入。但值得一试。如果它不起作用,您可以自己在 VBA 和 ADO 中完成所有导入。

关于vba Excel访问: zero length string to Null number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947160/

相关文章:

vba - 如何获取VBA中第二个括号后面的文本?

带宏小数分隔符的 Excel 到剪贴板

excel - VBA Excel 用户窗体。如何判断哪个图片被点击了

excel - 如何使用 VBA 引用 Excel 中的表格?

javascript - JavaScript 中的 Excel PERCENTRANK.INC

VBA 如何在单元格下方显示用户窗体?

json - 数组的大小 excel - json vba 解析器

vba - 如何使用 VBA 删除整个 Excel 列中的空格?

python - 从多个 Excel 文件创建 Pandas 数据框

java - 如何使用java查找xlsx中的空白单元格