2013-09-01 35 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