Excel VBA ADO切割小数(ADO中可能存在错误?)

问题描述 投票:1回答:1

请问有人可以帮帮我吗?

问题:我在一个模块中有下面的代码,它通常可以正常工作,但是当我在this sample file上运行它时,我注意到“上限”(D列)中的小数被删除了。

我发现的一个临时解决方案是我必须在示例文件中修改从1到1.0的上限(所以在末尾添加“.0”)以使其看起来像十进制数。在此之后,小数在表格上正确导入。但是,这不是一个解决方案。

我正在使用:Excel 2013(15.0.5111.1000)32位(办公软件包是:MS Office Standard 2013)并启用了以下库

如何重现:

  1. 将以下代码放在模块中并在示例文件上运行它
  2. 注意列D.从第6行开始,所有小数都被删除。你只会看到整数。
  3. 现在,打开示例文件(例如,在Notepad ++中),并将第26行中的上限值从“1”修改为“1.0”,然后保存。
  4. 在修改后的示例文件上再次运行以下代码,并注意从第6行开始的D列(上限),显示所有小数。

知道为什么会这样吗?

Sub ADODB_Import_CSV()

ThisWorkbook.Sheets(1).Activate
ThisWorkbook.Sheets(1).Cells.Clear

Dim Connection As New ADODB.Connection
Dim Recordset As New ADODB.Recordset

On Error Resume Next
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
On Error GoTo 0

ImportedFileFullPath = Application.GetOpenFilename
If ImportedFileFullPath = False Then Exit Sub
ImportedFileDirPath = Mid(ImportedFileFullPath, 1, InStrRev(ImportedFileFullPath, "\"))
ImportedFileName = Mid(ImportedFileFullPath, InStrRev(ImportedFileFullPath, "\") + 1, Len(ImportedFileFullPath))

Provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ImportedFileDirPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited"""
strSQL = "SELECT Trim(TestCodeDescription)," & _
                    "Cdbl(NumbericMeasure) AS Measurements," & _
                    "Cdbl(LowerLimit) AS LowerLimit," & _
                    "Cdbl(UpperLimit) AS UpperLimit" & _
             " " & _
             "FROM [" & ImportedFileName & "]" & _
             " " & _
             "WHERE (IsNumeric(LowerLimit) AND IsNumeric(UpperLimit) AND IsNumeric(NumbericMeasure) AND LowerLimit<>UpperLimit AND IsDate(EventDateTime1))"

Connection.Open Provider
Recordset.Open strSQL, Connection

For i = 0 To Recordset.Fields.Count - 1
    Cells(1, i + 1).Value = Recordset.Fields(i).Name
Next i

With ActiveSheet
    .Range("A2").CopyFromRecordset Recordset
    .Range("A1").AutoFilter
    .Columns.AutoFit
End With
Recordset.Close: Set Recordset = Nothing: Connection.Close: Set Connection = Nothing

End Sub
sql excel vba ado adodb
1个回答
0
投票

谢谢大家解决了这个问题。

事实证明,解决方案是在与我的CSV文件相同的文件夹中创建一个“schema.ini”文件,该文件由ADO处理。

我使用以下几行创建了ini文件,问题现在已经消失。

[sample file for analysis.csv]
Format=CSVDelimited
Col1=SerialNumberCustomer Text
Col2=EventDateTime1 DateTime
Col3=EquipmentName Text
Col4=TestCodeDescription Text
Col5=NumbericMeasure Double
Col6=LowerLimit Double
Col7=UpperLimit Double
© www.soinside.com 2019 - 2024. All rights reserved.