MS ACCESS OpenRecordset округление десятичных дробей - PullRequest
1 голос
/ 13 марта 2019

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

            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]," & _
        "tblTempCurrentPastRawPrice.Lastbought, tblTempCurrentPastRawPrice.PreviousPrice," & _
        "tblTempCurrentPastRawPrice.Newdate, tblTempCurrentPastRawPrice.LastPrice," & _
        "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" & i).Value = Nz(rs1![Raw Material], "")
                .Range("B" & i).Value = Nz(rs1!Lastbought, "")
                .Range("C" & i).Value = Nz(rs1!PreviousPrice, 0)
                .Range("D" & i).Value = Nz(rs1!Newdate, 0)
                .Range("E" & i).Value = Nz(rs1!LastPrice, 0)

                i = i + 1
                rs1.MoveNext

1 Ответ

1 голос
/ 14 марта 2019

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

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

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

With xlSheet
    i = 7
    .Range("F" & i).Value = CDbl(1.2345)    ' Result: 1.2345
    .Range("G" & 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" & i)
            .Value = CDbl(Nz(rs1!PreviousPrice, 0))
            .NumberFormat = "#,##0.0000 $"
        End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...