CopyFromRecordset неправильно форматирует ячейки как дату? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть лист Excel, который загружает данные из базы данных, а затем помещает их в таблицу Excel с помощью команды CopyFromRecordset VBA.Моя проблема в том, что несколько ячеек (которые должны быть целыми числами) продолжают форматироваться как дата, независимо от того, что я делаю.Я изменил числовой формат в Excel на Number, но всякий раз, когда я перезагружаю данные из базы данных, формат переключается обратно на дату.

Тип данных в базе данных - Integer, и все же, когда я загружаю данные изБД, Excel по-прежнему меняет формат ячейки на Дата.Даже если конечный пользователь вводит целое число в ячейку после загрузки данных, Excel изменяет его на дату.Например, если я введу 5 в ячейки, Excel изменит их на 1/5/1900.

Почему Excel будет продолжать изменять эти ячейки на даты, даже после того, как раскрывающийся список форматов будет изменен на что-то еще?

Вещи, которые я пробовал:

  • Изменен формат даты, числа, общего текста и текста.Он возвращает значение Date в CopyFromRecordset

  • , удаляя столбец и создавая новый столбец в формате Number.Он все еще возвращается к CopyFromRecordset

  • Приведите тип данных к целому числу в операторе выбора

Есть ли другие идеи?

Частькода VBA, который загружает данные из базы данных:

SQLStr = "Select ......, [SO] FROM v_TRACKING"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server Native Client 11.0};Server=" & Server_Name & ";Database=" & Database_Name & ";Trusted_connection=yes;"
rs.Open SQLStr, Cn, adOpenStatic

dataRange = "a13:az" & (rs.RecordCount + 12)

With ActiveSheet.Range(dataRange)
    .ClearContents
    .CopyFromRecordset rs
End With

Все остальные столбцы остаются правильно отформатированными, но по какой-то причине столбец SO форматируется как дата.Я уже несколько дней бьюсь головой об стену об этом, так что любые идеи будут оценены :) 1030 *

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Я сталкивался с этой проблемой раньше;это можно решить с помощью свойства Cells Range:

With ActiveSheet.Range(dataRange)
    .ClearContents
    .Cells(1,1).CopyFromRecordset rs
End With
0 голосов
/ 27 декабря 2018

Одной ячейки достаточно для диапазона, чтобы отформатировать столбец в числовом формате.

DataRange = "a13"
With ActiveSheet.Range(DataRange)
    With ActiveSheet.Range(DataRange).CurrentRegion
        .ClearContents
        .CurrentRegion.Columns("SO").NumberFormatLocal = "0_ "
    End With
    .CopyFromRecordset rs
End With
...