Кто-нибудь может мне помочь с этим, пожалуйста?
Проблема :
У меня есть приведенный ниже код в модуле, который обычно работает отлично, но когда я запускаю его на этом примере файла , я заметил, что десятичные дроби в «Верхнем пределе» (столбец D) обрезаются.
Временное решение, которое я нашел , состояло в том, что мне пришлось изменить в файле примера верхний предел от 1 до 1,0 (чтобы добавить «.0» в конце) в строке 26, чтобы он выглядел как десятичное число. После этого десятичные дроби были правильно импортированы на листе. Но это не решение.
Я использую :
Excel 2013 (15.0.5111.1000) 32-разрядный (офисный пакет: MS Office Standard 2013) и следующие библиотеки включены
Как воспроизвести :
- Поместите приведенный ниже код в модуль и запустите его на примере файла
- Обратите внимание на столбец D. Начиная со строки 6 все десятичные дроби обрезаются. Ты сможешь
смотреть только целые числа.
- Теперь откройте файл примера (например, в Notepad ++) и измените
верхнее предельное значение в строке 26 от «1» до «1,0», затем сохраните его.
- Еще раз запустите приведенный ниже код в измененном файле примера и
столбец D (верхний предел), начиная со строки 6 все десятичные дроби
появляются.
Есть идеи, почему это происходит?
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