3

这是我的第一篇文章,我对 vba 非常陌生,所以请保持温和。我创建了一个用户表单,其中包含区域 (TextBox5)、重量 (TextBox1)、城市 (TextBox3) 和成本 (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 到 999 磅...6.00 从 1000 到 1999 磅....从 2000 到最多 9000 磅。是 5.50

对于境外的费率是:最低 20.00...相同的磅数。频率为 10.00、9.25、8.00。

任何正确方向的帮助或建议将不胜感激!谢谢!

4

3 回答 3

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
于 2013-09-01T01:14:21.653 回答
0

如果我了解您的主要问题,这就是我将用作确定成本的基础。请参阅我在下面输入的步骤:

Private Sub TextBox4_Change() Dim AX As Single AX = Val(textBox1.Text) If (TextBox5.Text = "Within Territory") Then Select Case Val(textBox1.Text) Case 100 To 999 Val(TextBox4.Text) = AX * 6.5 / 100 * 1.3 Case 1000 到 1999 Val(TextBox4.Text) = AX * 6# / 100 * 1.3 Case 2000 到 9000 Val(TextBox4.Text) = AX * 5.5 / 100 * 1.3 Case Else End Select

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

结束子

于 2013-09-01T02:39:11.810 回答
0

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

于 2013-09-01T00:33:19.387 回答