Страницы: 1
RSS
VBA: корректная выборка типа double по ADO из листа excel.
 
Здравствуйте, коллеги!

Столкнулся со следующей ситуацией:
делаю выборку select'ом по листу книги и вставляю результат в другой лист, функционал простой:
Код
    Dim SQLConn As Object, Recordset As Object
    Dim i As Integer
    Set SQLConn = CreateObject("ADODB.Connection")
    SQLConn.CursorLocation = 3
    SQLConn.Open "Provider=Microsoft.Ace.OLEDB.12.0; Extended Properties=""Excel 12.0; HDR=Yes;""; Data Source=" & ActiveWorkbook.FullName
    Set Recordset = SQLConn.Execute("SELECT [TypeNum], [TypeStr] FROM [db$]")
    ReDim arr(Recordset.RecordCount - 1, Recordset.Fields.Count - 1)
    i = 0
    Do While Not Recordset.EOF
        arr(i, 0) = Recordset.Fields("TypeNum")
        arr(i, 1) = Recordset.Fields("TypeStr")
        i = i + 1
        Recordset.MoveNext
    Loop
    ThisWorkbook.Sheets("result").Cells(1, 1).Resize(Recordset.RecordCount, Recordset.Fields.Count) = arr
Если в столбце TypeNum тип числовой, то дробные числа при перечислении выводятся как Null.
Если тип столбца текстовый (как в TypeStr), то все ок.

Можно конечно использовать граблю в виде преобразования столбца в текстовый формат, но я хочу понять сей опус.
Куда смотреть?

Ну и по канону, файл с данными во вложении.
 
Эх Олег, Олег.
Найдите несколько отличий между файлами.
 
Цитата
doober написал:
Эх Олег, Олег.
Действительно, чего это я. Заработался видимо.
А я все смотрю на DecimalSeparator, который выдает запятую)).
По итогу получается, проще всего сделать замену разделителя на системный перед выборкой. Что-то вроде
Код
Columns(1).Replace What:=",", Replacement:="."
Спасибо, Сергей!
Страницы: 1
Наверх