如果声明让我难过

时间:2013-09-01 00:21:06

标签: excel-vba vba excel

这是我的第一篇文章,我对vba非常新,所以请保持温柔。 我创建了一个用户表单,其中包含Territory(TextBox5),Weight(TextBox1),City(TextBox3)和Cost(TextBox4)。这是一个计算某个货运公司的运输成本的表格。有与体重和城市相关的费率。如果城市在领土内,则每100磅的速率最高可达9000磅。但是,如果费率超出地域,则每100磅的费率更高,最高不超过9000磅。 领土内至少有15.00美元,境外有至少$ 20.00。      这只是我试过的方式......

 Private Sub TextBox4_Change()
     Dim A As Single
     A = Val(TextBox1.Text)
     If (TextBox5.Text = "Within Territory" And TextBox1.Text <= 233) Then
         TextBox4.Text = TextBox1.Text * 6.5 / 100 * 1.3
         If (TextBox5.Text = "Out of Territory" And TextBox1.Text <= 200) Then
             TextBox4.Text = TextBox1.Text * 10 / 100 * 1.3
         End If
    End If       
End Sub

我想通过并将所有费率放在不同的权重中,但我甚至无法让这部分工作。 100的划分是每100磅。 1.3是30%的燃油附加费。

境内的费率如下......最低15.00 .... 6.50每100到999lbs ... 6.00从1000到1999磅......从2000到最大9000磅。是5.50

对于领土之外的费率是:最低20.00 ...相同的磅。频率为10.00,9.25,8.00。

任何有关正确方向的帮助或建议都将非常感谢!! 谢谢!

3 个答案:

答案 0 :(得分:1)

采取更有条理的方法将有所帮助。

  • 将您的数据与逻辑分开(使其更易于维护)
  • 在第一个频段使用If权重Then计算费率Else考虑下一个频段
  • 我认为您不希望在TextBox4更改(费用)时执行此操作。可能在任何其他文本框更改。

尝试此操作(从Territory或Weight文本框更改事件调用)

Private Sub TextBox4_Change()
    Dim weight As Single
    Dim cost As Single

    Dim rates(1 To 3) As Single
    Dim bands(1 To 3) As Single
    Dim min As Single
    Dim surcharge As Single

    weight = Val(TextBox1.Text)

    If weight <= 0# Then
        ' deal with invalid weight
        TextBox4.Text = "Invalid Weight"
        Exit Sub
    End If

    If TextBox5.Text = "Within Territory" Then
        rates(1) = 6.5
        rates(2) = 6#
        rates(3) = 5.5
        min = 15#
    ElseIf TextBox5.Text = "Out of Territory" Then
        rates(1) = 10#
        rates(2) = 9.25
        rates(3) = 8#
        min = 20#
    Else
        Exit Sub
    End If
    bands(1) = 1000#
    bands(2) = 2000#
    bands(3) = 9000#
    surcharge = 1.3
    If weight > bands(3) Then
        TextBox4.Text = "Weight too big"
        Exit Sub
    End If

    If weight < bands(1) Then
        cost = weight * rates(1) / 100#
    Else
        cost = bands(1) * rates(1) / 100#
        If weight < bands(2) Then
            cost = cost + (weight - bands(1)) * rates(2) / 100#
        Else
            cost = cost + (bands(2) - bands(1)) * rates(2) / 100#
            If weight <= bands(3) Then
                cost = cost + (weight - bands(2)) * rates(3) / 100#
            End If
        End If
    End If
    cost = cost * surcharge
    If cost < min Then cost = min

    TextBox4.Text = Format(cost, "#,##0.00")
End Sub

答案 1 :(得分:0)

如果此语言是强类型语言(如java),则需要将文本显式更改为整数才能计算价格。您的比例似乎也是一个滑动比例。如果您不希望数字减少,则必须将初始金额(区域内15美元,外部区域20美元)添加到您获得的值。在这种情况下,您可以使用if-else语句,如下所示(这是伪代码,而不是实际的vba文本):If(文本框5 =“在区域内”)然后str2num(文本框4)+ = 15。然后你会在循环中根据需要进行其他乘法和加法。否则,str2num(文本框4)+ = 20并从那里进行其他计算。希望这会有所帮助。

答案 2 :(得分:0)

如果我理解你问题的主要部分,我将用它作为确定成本的基础。 请参阅我在下面输入的步骤:

Private Sub TextBox4_Change()     Dim AX As Single     AX = Val(textBox1.Text)     如果(TextBox5.Text =“在Territory内”)那么         选择Case Val(textBox1.Text)         案例100至999             Val(TextBox4.Text)= AX * 6.5 / 100 * 1.3         案例1000至1999年             Val(TextBox4.Text)= AX * 6#/ 100 * 1.3         案例2000至9000             Val(TextBox4.Text)= AX * 5.5 / 100 * 1.3         Case Else         结束选择

ElseIf (TextBox5.Text = "Out of Territory") Then
    Select Case Val(textBox1.Text)
    Case 100 To 999
        Val(TextBox4.Text) = AX * 10 / 100 * 1.3
    Case 1000 To 1999
        Val(TextBox4.Text) = AX * 9.5 / 100 * 1.3
    Case 2000 To 9000
        Val(TextBox4.Text) = AX * 8 / 100 * 1.3
    Case Else
    End Select
End If

End Sub