Справка по Excel VBA для калькулятора членских взносов - PullRequest
0 голосов
/ 04 мая 2019

Мой курсовой проект необходим для подготовки следующей программы.Это программа расчета членских взносов для спортивного клуба.Сборы меняются следующим образом.Это должно сделать без каких-либо функций Дата, Год или Месяц.

2014 - с 01 по 2014 - 02 ---> 100 долларов (2014 год - 01 месяц - месяц)

2014 - с 03 по 2018 - 02 ---> 120

2018 - с 03 по 2019 --------> - $ 150

https://i.imgur.com/TTWLz9m.jpg?1

Я мог бы сделать переменную (x1) для вычисления месяцев любого диапазона года для вышеуказанной программы.

X1 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1)

Расчет начинается с 2014 года. Если начать с 2014-01 или 2014-02, это должно отображаться в A1.Если конечный год больше, чем 2014, значение A1 должно отображать 200, а остаток от другого значения должен отображаться в B1, как показано на рисунке ниже.(имеется в виду, когда значение на конец года (C)> 2014, вычисления прекращаются и отображается это значение в A1 и другие вычисления идут вперед, а остальные должны отображаться в B1) https://i.imgur.com/Se0CFyI.jpg?1

Проблема: Я не могу остановить значения B1, если значение C> 2018 и значение D> 02

Вопрос: Как изменить правильность этой программы в Excel VBA до 2018-02,но в результате неправильный ответ после 2018-03 и 2019 гг.

Private Sub CommandButton1_Click()

A1.Value = 0
B1.Value = 0
D1.Value = 0

X1 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1)
X2 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (10 - Val(B.Value) + Val(D.Value) + 1)
X3 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (11 - Val(B.Value) + Val(D.Value))
X4 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1) - Val(D.Value) + 2
X11 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1) - Val(D.Value) + 1
X5 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + 12
X6 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + 11
X7 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value)) - Val(D.Value) + 1
X8 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value)) - Val(D.Value) + 2
X9 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1) - Val(D.Value) + 1
X10 = (((Val(C.Value) - 1) - Val(A.Value)) * 12) + (12 - Val(B.Value) + Val(D.Value) + 1) - Val(D.Value) + 2

Y1 = ((Val(A.Value)) * 0) + (Val(B.Value))

'2014 January and February ===========================================================

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) > 2014 And Val(D.Value) = 1 Then
    A1.Value = 2 * Y1 * 100
End If

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) = 2014 And Val(D.Value) = 1 Then
    A1.Value = Y1 * 100
End If

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) >= 2014 And Val(D.Value) >= 2 Then
    A1.Value = 2 * Y1 * 100
End If

If Val(A.Value) = 2014 And Val(B.Value) = 2 And Val(C.Value) >= 2014 And Val(D.Value) <= 12 Then
    A1.Value = Y1 / 2 * 100
End If

'===================================================================================================

'2014- March to 2018 - February

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) < 2018 And Val(D.Value) >= 1 Then
    B1.Value = (X2 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 2 And Val(C.Value) < 2018 And Val(D.Value) >= 1 Then
    B1.Value = (X3 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) >= 3 And Val(C.Value) < 2018 And Val(D.Value) >= 1 Then
    B1.Value = (X1 * 120)
End If

If Val(A.Value) > 2014 And Val(B.Value) >= 1 And Val(C.Value) < 2018 And Val(D.Value) >= 1 Then
    B1.Value = (X1 * 120)
End If

If Val(A.Value) > 2014 And Val(B.Value) >= 1 And Val(C.Value) >= 2018 And Val(D.Value) >= 2 Then
    B1.Value = (X4 * 120)
End If

If Val(A.Value) > 2014 And Val(B.Value) >= 1 And Val(C.Value) >= 2018 And Val(D.Value) = 1 Then
    B1.Value = (X11 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) = 2018 And Val(D.Value) = 1 Then
    B1.Value = (X2 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) = 2018 And Val(D.Value) = 2 Then
    B1.Value = (X3 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 2 And Val(C.Value) = 2018 And Val(D.Value) = 1 Then
    B1.Value = (X6 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 2 And Val(C.Value) = 2018 And Val(D.Value) = 2 Then
    B1.Value = (X5 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) >= 3 And Val(C.Value) = 2018 And Val(D.Value) = 1 Then
    B1.Value = (X9 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) >= 3 And Val(C.Value) = 2018 And Val(D.Value) >= 2 Then
    B1.Value = (X10 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 1 And Val(C.Value) = 2018 And Val(D.Value) > 2 Then
    B1.Value = (X7 * 120)
End If

If Val(A.Value) = 2014 And Val(B.Value) = 2 And Val(C.Value) = 2018 And Val(D.Value) >= 3 Then
    B1.Value = (X8 * 120)
End If

'===================================================================================================
Me.Answer = (Me.A1 + 0) + (Me.B1 + 0) + (Me.D1 + 0)

End Sub

1 Ответ

0 голосов
/ 04 мая 2019

Я не уверен, что CDate и IsDate запрещены. Я также предполагаю, что любая дата> = "2018-03-01" составляет 150 долларов, хотя вы можете изменить это на промежуточное значение. Если это приемлемые предположения. Я добавил "-01", чтобы выровнять его с презентацией, но, возможно, вы также можете просто присоединить его без этого шага.

Option Explicit
Public Sub test()
    Dim x As String, var As String
    var = "2014-01"
    var = var & "-01"
    If Not IsDate(CDate(var)) Then
        Debug.Print "please ensure valid input"
        Exit Sub
    End If
    Select Case True
    Case var >= CDate("2018-03" & "-01")
        x = "$150"
    Case var >= CDate("2014-03" & "-01")
        x = "$120"
    Case var >= CDate("2014-01" & "-01")
        x = "$100"
    Case Else
        x = "undefined"
    End Select
    Debug.Print x
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...