vba неправильно вводит значения ячеек из одной переменной - PullRequest
0 голосов
/ 12 марта 2020

У меня есть задача ввести вес каждого продукта в систему нашей компании (более 65 000), поэтому я использую Excel и немного ограниченные знания vba для автоматизации этого, где это возможно.

План таков: Я ввожу часть названия продукта, а затем вводимую цифру, и она вводит эту цифру во все соответствующие строки на листе.

Проблема; число, которое я ввожу, редко превышает 2 знака после запятой, однако цифра, введенная на листе, не одинакова - всегда очень близко, но не совсем. Например, когда я только что попытался ввести 0,88 в соответствующие ячейки, он ввел 0,87999995.

Код (упрощенный):

Sub EnterWeight()

Dim Filter As String
Dim Weight As Single

Filter = InputBox("Add text filter", "Add Filter")

w = InputBox("Insert weight in Kg", "Enter Weight", 1) 
'(yes, I know it should be 'mass in Kg', but ... ¯\_(ツ)_/¯ )

Weight = CDec(w)

Debug.Print Weight 'To test that it's the correct number, always seems to be ok.

    For b = 1 To Activesheet.UsedRange.Rows.Count
        If Cells(b, ) Like "*" & Filter & "*" Then 'Find the filter in any part of the cell

            If Cells(b, 2) <> "" And Cells(b, 2).Value <> SG Then 'Cells already populated with a different value

            y = MsgBox("Product """ & Cells(b, 1).Value & _
                """ already has a weight assigned of " & _
                Cells(b, 2).Value & Chr(13) & _
                "OverWrite?", vbYesNo + vbExclamation, _
                "Weight already assigned")
                If y = vbYes Then Cells(b, 2).Value = Weight

            Else
                Cells(b, 2).Value = Weight
            End If

        End If

    Next
End sub

Может кто-нибудь сказать мне, почему это не будет вводить Weight переменная правильно в соответствующих ячейках? Поиски в гугле, похоже, не дали ответа, хотя, возможно, я просто спрашиваю не о том.

Заранее большое спасибо

1 Ответ

3 голосов
/ 12 марта 2020

Эта проблема может быть уменьшена до:

Sub test1()
    Dim Weight As Single
    Weight  = InputBox("Insert weight in Kg", "Enter Weight", 1)
    Cells(2, 2).Value = Weight
End Sub

При вводе «.88» в поле ввода в ячейку поступает «0,879999995231628»

Однако, изменяя Weight до Double:

Sub test2()
    Dim Weight As Double
    Weight  = InputBox("Insert weight in Kg", "Enter Weight", 1)
    Cells(2, 2).Value = Weight
End Sub

При вводе «.88» в поле ввода ячейка получает «0,88»


Проверьте ответ VBA Double против Single округления для очень подробного объяснения, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...