MS ACCESS OpenRecordset округление десятичных дробей

#excel #vba #ms-access #export #recordset

#excel #vba #ms-access #экспорт #набор записей

Вопрос:

У меня есть запрос, который показывает цену на мои продукты и сравнивает с предыдущими месяцами. Запрос в Access правильно отображает цены с 4 десятичными знаками, но когда я экспортирую в Excel с помощью приведенного ниже кода, цифры округляются до 2 десятичных знаков. В моем коде много строк форматирования, которые я опустил. Пожалуйста, обратите внимание, что я не форматирую цену в Excel. Я хочу показать все число. Я думаю, что функция набора записей каким-то образом округляет число. Я ценю помощь. Спасибо

             Dim xlApp As Object
            Dim xlBook As Object
            Dim xlSheet As Object
            Dim i As Integer

            Dim SQL As String
            Dim rs1 As DAO.Recordset

 SQL = "SELECT tblTempCurrentPastRawPrice.ID, tblTempCurrentPastRawPrice.[Raw Material]," amp; _
        "tblTempCurrentPastRawPrice.Lastbought, tblTempCurrentPastRawPrice.PreviousPrice," amp; _
        "tblTempCurrentPastRawPrice.Newdate, tblTempCurrentPastRawPrice.LastPrice," amp; _
        "tblTempCurrentPastRawPrice.ReportDate FROM tblTempCurrentPastRawPrice ORDER BY tblTempCurrentPastRawPrice.[Raw Material]"


        Set rs1 = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot)


 Set xlApp = CreateObject("Excel.Application")

            xlApp.Visible = False
            Set xlBook = xlApp.Workbooks.Add
            Set xlSheet = xlBook.Worksheets(1)

    With xlSheet

   i = 7    

            Do While Not rs1.EOF


                .Range("A" amp; i).Value = Nz(rs1![Raw Material], "")
                .Range("B" amp; i).Value = Nz(rs1!Lastbought, "")
                .Range("C" amp; i).Value = Nz(rs1!PreviousPrice, 0)
                .Range("D" amp; i).Value = Nz(rs1!Newdate, 0)
                .Range("E" amp; i).Value = Nz(rs1!LastPrice, 0)

                i = i   1
                rs1.MoveNext
  

Комментарии:

1. Если вы отредактируете ячейку Excel, десятичные дроби по-прежнему отсутствуют?

2. ДА. файл Excel содержит 2 десятичных знака. в Access отображается 0,3193, если я изменю формат в Excel, это будет 0,3200

3. Вы меняете формат в Excel до или после экспорта?

Ответ №1:

Интересно, я могу воспроизвести это. Это происходит потому, что столбцы имеют тип Currency .

По-видимому, Excel, как обычно, хочет быть более умным, чем это полезно для вас, и предполагает, что Currency всегда поставляется с двумя десятичными знаками и округляет их.

Чтобы легко воспроизвести, используйте этот код:

 With xlSheet
    i = 7
    .Range("F" amp; i).Value = CDbl(1.2345)    ' Result: 1.2345
    .Range("G" amp; i).Value = CCur(1.2345)    ' Result: 1.23 €
End With
  

Обратите внимание, что CCur(1.2345) в Access все еще 1.2345 .

Чтобы решить эту проблему, преобразуйте в Double перед записью в Excel, а затем отформатируйте в качестве валюты в Excel (с 2 или 4 десятичными знаками, в обоих случаях число фактически будет содержать все 4 десятичных знака):

         With .Range("C" amp; i)
            .Value = CDbl(Nz(rs1!PreviousPrice, 0))
            .NumberFormat = "#,##0.0000 $"
        End With