【问题标题】:I Need to code a Userform and apply a few different If Statement to create a cell value in a database我需要编写一个用户表单并应用一些不同的 If 语句来在数据库中创建一个单元格值
【发布时间】:2019-05-17 07:16:04
【问题描述】:

我是一名学生,不熟悉 VBA 编码和编程。我需要创建一个代码来评估 3 个 if 语句,并根据 if 语句的标准在我们正在使用的数据库中填充一个单元格值(给定折扣)。我已经创建了用户表单来输入客户 ID、客户名称、销售价值和出生日期。我遇到的问题是我需要根据以下内容创建一个 If 语句:

1) 如果客户出生时间早于 1960 年 1 月 5 日,他们的折扣应该是销售额的 10%(在给定的折扣列中应该只显示数字 - 而不是文本)

2) 如果客户出生于 1980 年 1 月 20 日之后,他们的折扣应该是 5% 销售价值(只有数字应该显示在给定的折扣列中 - 不是文本)

3) 对于所有其他出生日期不同的客户,他们的折扣应为 2%(因此 > 1/5/1960 和

我插入了我在下面编写的代码,但它似乎不起作用我希望有人可以帮助我。

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

【问题讨论】:

  • 代码的哪一部分不起作用?它在做什么呢?

标签: excel vba if-statement excel-formula userform


【解决方案1】:

我认为使用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

【讨论】:

  • 你好,我的教授最后回复了我这个: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/20/1980# Then Range("F8") = Range( "D8") * 0.05 Else If Range("E8") > #1/5/1960# Or Range("E8")
【解决方案2】:

试试:

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

【讨论】:

  • '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/20/1980# Then Range("F8") = Range("D8") * 0.05 Else If Range(" E8") > #1/5/1960# Or Range("E8")
  • @bake3317 - 可能有很多东西,但我不会称之为“正确的代码”
【解决方案3】:

您好,感谢您的回复,我的教授帮助我指出您可以使用 # 符号来表示日期。正确的代码如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多