Мне нужно закодировать пользовательскую форму и применить несколько различных операторов If для создания значения ячейки в базе данных. - PullRequest
0 голосов
/ 17 декабря 2018

Я студент и новичок в кодировании и программировании VBA.Мне нужно создать код, который будет оценивать 3 оператора if и основываясь на критериях оператора if, в ячейке, с которой мы работаем, будет заполнено значение ячейки (с учетом скидки).Я уже создал пользовательскую форму для ввода идентификатора клиента, имени клиента, значения продаж и DOB.Проблема, с которой я столкнулся, заключается в том, что мне необходимо создать заявление If на основе следующего:

1) Если клиент родился раньше, чем 5 января 1960 года, его скидка должна составлять 10% от продажной стоимости.(в столбце скидки должны отображаться только цифры, а не текст)

2) Если клиент родился после 20.01.1980, его скидка должна составлять 5% от продажной цены (должны отображаться только цифрыв столбце скидки (не текст)

3) Для всех других клиентов, родившихся в другую дату, их скидка должна составлять 2% (т. е.> 1/5/1960 и <1/20/1980), (в колонке скидок должны отображаться только цифры, а не текст). </p>

Я вставил код, который написал ниже, но, похоже, он не работает. Я надеюсь, что кто-то может мне помочь.

Private Sub CommandButton1_Click()

discount = Range("F8").Value

Rows(8).Insert Copyorigin:=xlFormatFromRightOrBelow

Range("B8").Value = TextBox1.Text
Range("C8").Value = TextBox2.Text
Range("D8").Value = TextBox3.Text
Range("E8").Value = TextBox4.Text
Range("F8").Value = discount

If discount < 1 / 5 / 1960 Then result = Range("D8").Value * 0.1 Else

If discount > 1 / 20 / 1980 Then result = Range("D8").Value * 0.05 Else

If discount > 1 / 5 / 1960 & discount < 1 / 20 / 1980 Then result = 
Range("D8").Value * 0.02

End If
End If
End If

Unload Me

End Sub

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Попробуйте:

Option Explicit

 Sub Test()

    Dim DateStart As Date, Result As Double

    With ThisWorkbook.Worksheets("Sheet1")

        DateStart = Format(.Range("F8").Value, "dd/mm/yyyy")

        If DateStart < Format("1/5/1960", "dd/mm/yyyy") Then
            Result = .Range("D8").Value * 0.1
        ElseIf DateStart > Format("1/20/1980", "dd/mm/yyyy") Then
            Result = .Range("D8").Value * 0.05
        Else: Result = .Range("D8").Value * 0.02
        End If

    End With

 End Sub
0 голосов
/ 18 декабря 2018

Здравствуйте. Спасибо за ответы, мой профессор помог мне, указав, что вы можете сослаться на дату, используя символ #.Правильный код выглядит следующим образом:

Private Sub CommandButton1_Click()

Sheets("Customers").Select
Range("B8").Select
Rows(8).Insert CopyOrigin:=xlFormatFromRightOrBelow = 1

Range("B8") = TextBox1.Text
Range("C8") = TextBox2.Text
Range("D8") = TextBox3.Text
Range("E8") = TextBox4.Text

If Range("E8") < #1/5/1960# Then
Range("F8") = Range("D8") * 0.1

Else

If Range("E8") > #1/20/1980# Then
Range("F8") = Range("D8") * 0.05

Else
If Range("E8") > #1/5/1960# Or Range("E8") < #1/20/1980# Then
Range("F8") = Range("D8") * 0.02

End If
End If
End If

Unload Me


End Sub
0 голосов
/ 17 декабря 2018

Я думаю, вам будет лучше использовать SELECT CASE вместо нескольких IF операторов.Это также помогло бы, если бы вы определили свои переменные.Попробуйте что-то вроде этого:

Dim dteDoB As Date

dteDoB = DateValue(Range("F8").Value)

Select Case dteDoB
    Case Is < DateValue("5/1/1960"): result = Range("D8").Value * 0.1
    Case Is > DateValue("20/1/1980"): result = Range("D8").Value * 0.05
    Case Else: esult = Range("D8").Value * 0.02
End Select
...