Пользовательский расчет Combobox не рассчитан правильно - PullRequest
0 голосов
/ 24 июня 2019

У меня проблема с математикой или кодом, из-за которой вычисление значений в выпадающем списке будет неточным. Где сумма должна быть 100%, я получаю либо 80%, либо 125%. Есть 11 комбинированных списков, которые могут быть 1-5 или NA. NA имеет значение 0. Вот код, который я использую:

Private Sub CommandButton1_Click()

Dim c As Control, n1 As Long, n2 As Long, n3 As Long, n4 As Long, n5 As Long
n1 = 0
n2 = 0
n3 = 0
n4 = 0
n5 = 0

For Each c In Me.Controls
    If TypeName(c) = "ComboBox" Then
        If c.Value = "1" Then n1 = n1 + 1
        If c.Value = "2" Then n2 = n2 + 2
        If c.Value = "3" Then n3 = n3 + 3
        If c.Value = "4" Then n4 = n4 + 4
        If c.Value = "5" Then n5 = n5 + 5
    End If
Next c

TXTCount = (n1 + n2 + n3 + n4 + n5)

For Each c In Me.Controls
    If TypeName(c) = "ComboBox" Then
        If c.Value = "1" Then n1 = n1 + 1
        If c.Value = "2" Then n2 = n2 + 1
        If c.Value = "3" Then n3 = n3 + 1
        If c.Value = "4" Then n4 = n4 + 1
        If c.Value = "5" Then n5 = n5 + 1
    End If
Next c

TXTPotential = (n1 + n2 + n3 + n4 + n5 * 4)

TXTScore = TXTCount.Value / TXTPotential.Value

(результаты могут превышать 100% при большем количестве 4 и 5 баллов)

1 Ответ

0 голосов
/ 24 июня 2019

Я думаю, что это вопрос порядка операций.

Попробуйте TXTPotential = ((n1 + n2 + n3 + n4 + n5) * 4)

редактировать: Я изменил некоторые из ваших имен переменных и удалил n1, n2 и т. Д., Вы можете оставить их, если вы что-то делаете с каждым из них по отдельности, но в этом фрагменте кода нет необходимости иметь так много.

    Dim target_control As Control
    Dim control_value As Integer
    Dim control_count As Integer


    control_value = 0
    control_count = 0

    For Each target_control In Me.Controls
        If TypeName(target_control) = "ComboBox" Then
            If Not target_control.Value = "NA" Then
                control_value = control_value + cint(target_control.Value)
                control_count = control_count + 1
            End If
        End If
    Next

    TXTPotential = control_count * 4 'I'm guessing

    TXTScore = control_value / TXTPotential

изменить 2:

это должно игнорировать 0с

...