2013-09-01 25 views
3

这是我的第一篇文章,我对vba非常陌生,所以请温和。 我创建了具有Territory(TextBox5),Weight(TextBox1),City(TextBox3)和Cost(TextBox4)的用户表单。这是计算某个货运公司运输成本的一种形式。有与体重和城市相关的费率。如果城市在领土范围内,则每100磅的费率高达9000磅。但是,如果费率是境外,那么每100磅的费率就会达到最高9000磅。 Within Territory至少有$ 15.00,Outside of Territory有最低$ 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分为每100lbs。 1.3是燃油附加费的30%。

率内的领土如下...最低15.00 .... 6.50每100至999lbs ... 6.00从1000高达1999 lbs ....从2000到最高9000磅。是5.50

境外费率是:最小20.00 ...相同的磅。频率是10.00,9.25,8.00。

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

回答

0

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

1

采取更结构化的方法将有所帮助。

  • 独立您从您的逻辑数据(更容易维护)
  • 使用类似在第一波段Then计算速度If重量Else考虑下一个波段
  • 要做到这一点,我不认为在TextBox4变更(成本)。可能在任何其他文本框的变化。

试试这个(从区域或重文本框更改事件调用)

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 
+0

后读这,这是绝对然而,由于textbox4仍然没有与结果填充。光标在那里移动,但只闪烁,没有结果。 – user2736412

+0

你采取了哪些步骤来调试?例如,子结尾的“成本”值是多少? –

+0

我不知道该怎么做调试。我不介意试图找出它的挑战,所以我可以学习,但我甚至不知道从哪里开始你的问题。我知道我在寻找什么价值,但不知道如何实现。很抱歉...我很新。 – user2736412

0

如果我理解你的主件的问题,这里是我会以此为基础使用,以确定成本。 看到我下面输入步骤:

私人小组TextBox4_Change() 昏暗AX单 AX =瓦尔(textBox1.Text) 如果(TextBox5.Text = “在区域”)然后 选择案例瓦尔(textBox1.Text) Case 100 To 999 Val(TextBox4.Text)= AX * 6.5/100 * 1。3 案例1000〜1999 缬氨酸(TextBox4.Text)= AX * 6#/ 100 * 1.3 案例2000〜9000 缬氨酸(TextBox4.Text)= AX * 5.5/100 * 1.3 案例否则 结束选择

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 

末次

+0

这不适用于OP中定义的增量率(从1000到1999的lbs_6磅等等) –

+0

谢谢...它看起来像你有一切涵盖...我不知道,因为我是这么新,但它仍然不填充Textbox4。 – user2736412