【问题标题】:Non-empty field from Excel sheet shows up as blank in recordsetExcel 工作表中的非空字段在记录集中显示为空白
【发布时间】:2014-07-03 00:05:04
【问题描述】:

我正在使用 excel vba 编写一个宏,该宏从 Excel 工作表中读取数据并对其进行处理。基本上,我正在将 Excel 工作簿 A 中的数据复制到 Excel 工作簿 B 中的工作表 X 中。工作簿B 包含一个宏,该宏执行此复制,然后将数据从工作表X 读取到记录集中。

我遇到了一个非常奇怪的问题。我的问题是,当我尝试打印记录集值时,记录集中有一个字段显示为空白。

这是我的代码有问题的部分。 packageName 被传递到这个包含字符串的函数中。记录集对象objRecordset 错误地获取Name 字段并在我尝试打印该项目的记录集值时显示为空白,即使它不是空的。其他字段打印得很好。名称字段包含字母和数字,例如ABC1232WHSJ, ABCD3456。知道出了什么问题吗?

Dim objConnect As ADODB.Connection, objRecordset
Set objConnect = New ADODB.Connection

objConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & ";" & "Extended Properties=""Excel 8.0;HDR=Yes;"";"

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open "Select * FROM [Sheet1$] WHERE Package LIKE '" & _
            packageName & "'", objConnect, adOpenStatic, adLockOptimistic, adCmdText

Debug.Print objRecordset.Fields.Item("Package")
Debug.Print objRecordset.Fields.Item("Name")

【问题讨论】:

  • 为我工作。但是,如果没有您的实际数据集,很难真正进行测试。
  • 1) 查看源列是否有任何花哨的格式(如“文本”).... 2) 是否会将“名称”字段误解为单元格地址?
  • 感谢大家的建议。知道它是否与连接字符串中的“扩展属性”有关吗?另外,如何确保名称不会被误解为单元格地址?源没有花哨的格式。它只是一个包含 csv 的字段。我刚刚手动创建了一个包含类似数据的工作表,它运行良好,所以我认为它可能与实际数据集有关,但不确定是什么。

标签: excel adodb recordset vba


【解决方案1】:

我也遇到了同样的问题。

验证列是否具有相同的数字格式。

当您使用 ado 连接 ado 时,请为您的第一行使用一种格式。 if 是一个数字,例如,第二个是字符串,表中的值是空的(如果创建一个表,否则你会收到错误)

解决方案(适合我的工作)是在导入数据之前打开工作簿,并用需要的格式格式化列,我使用范围内的属性 numberformat。

[]的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多