3

これは私の最初の投稿であり、vba には非常に慣れていないので、お手柔らかにお願いします。Territory (TextBox5)、Weight (TextBox1)、City (TextBox3)、Cost (TextBox4) を持つユーザー フォームを作成しました。某運送会社の送料を計算するためのフォームです。重量と都市に関連付けられた料金があります。都市がテリトリー内にある場合、最大 9000 ポンドまで 100 ポンドあたりの料金があります。ただし、料金が地域外の場合は、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% の燃油サーチャージです。

地域内の料金は次のとおりです... 100 あたり最低 15.00....6.50 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 = "領域内") Then Select Case Val(textBox1.Text) Case 100 ~ 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. Thenループ内で必要に応じて他の乗算と加算を行います。それ以外の場合は、str2num (テキスト ボックス 4) += 20 で、そこから他の計算を行います。うまくいけば、これが役に立ちます。

于 2013-09-01T00:33:19.387 に答える