2016-10-08 2 views
0

私のコードは現在、製品コードと製品の数量を求め、消費者が得た合計コストと割引を表示します。しかし、私は現在、 "異なる種類の製品を購入する"ことを尋ねるFor Loopを使用する必要があります。したがって、このFor LOOPに現在のコードを置きます。つまり、ループを通過するたびに、購入した特定の製品に関する情報を取得して表示する必要があります。 Forループに自分のコードを挿入しようとして何時間も費やさなかった。私はむしろ経験がなく、自分自身を教えるので、どんな助けも大いに役立つでしょう!ありがとう!Forループ内に複数のDoループを含むVBAコード全体を挿入

Sub Product() 
Dim ProductCode As String 
Dim ErrorCheck As Boolean 
Dim Cost As Double, MinQty As Double, Discount As Double 
Dim MyRange As Range 
Dim found As Variant 
Dim QtyBought As Integer 
Dim TotalCost As Double 

Set MyRange = Worksheets("Data").Cells '<-- the range containing the data provided 


Do '"main" outer loop 
    Do '"Product code input" inner loop 
     ProductCode = Application.InputBox("Enter the Product's code.", Type:=2) '<--| force string input 
    Loop While ProductCode = "" 


    found = Application.Match(ProductCode, MyRange.Columns(1), 0) '<-- try getting ow index of prodcut code in 1st column of "MyRange" range 
    If IsError(found) Then '<--| if no match found... 
     MsgBox "The value entered was not found!" & vbCrLf & vbCrLf & "Please, try again", vbCritical + vbOKOnly '<-- inform the user and loop again 
    Else '<--| otherwise 
     With MyRange(found, 1) '<-- reference the matching cell 
      Cost = .Offset(0, 1).Value '<--| store "Cost from cell 1 column to the right of the referenced one 
      MinQty = .Offset(0, 2).Value '<--| store "MinQty" from cell 2 columns to the right of the referenced one 
      Discount = .Offset(0, 3).Value '<--| store "Discount" from cell 3 columns to the right of the referenced one 
     End With 
    End If 
Loop While IsError(found) 

'Obtaining QtyBought Value 
QtyBought = InputBox("Enter the QtyBought ordered.") 


'Error checking 
Do Until ErrorCheck = False 
    If IsNumeric(QtyBought) = False Then 
     ErrorCheck = True 
     MsgBox ("Not a valid entry.") 
     QtyBought = InputBox("Enter the QtyBought ordered.") 
    Else 
     ErrorCheck = False 
    End If 
Loop 
'finding out the cost of the prodcut ordered. 

TotalCost = Selection.Value * QtyBought 
Discount = Selection.Value * Discount 
'Obtaining discount rate 
If QtyBought > MinQty Then 
    MsgBox ("You purchased " & QtyBought & "units of product " & ProductCode & ".The total cost is " & Format(TotalCost, "$#,##0") & "Because you purchased at least " & MinQty & "units, you get a discount of " & Discount & "on each unit") 

Else 
    MsgBox ("Sorry, You don't qualify for any discount") 

End If 


End Sub 
ProductName入力ループで、以下のようにしながら、私は「内側」サブを呼び出す「外側」サブを持っていると思います

答えて

0

Option Explicit 

Sub Products() 
    Dim ProductCode As String 
    Do '"main" outer loop 
     Do '"Product code input" inner loop 
      ProductCode = Application.InputBox("Enter the ProductCode's code [input space to end]", Type:=2) '<--| force string input 
     Loop While ProductCode = "" 
     If ProductCode <> " " Then Product ProductCode 
    Loop While ProductCode <> " " 
End Sub 

Sub Product(ProductCode As String) 
    Dim Cost As Double, MinQty As Double, Discount As Double 
    Dim MyRange As Range 
    Dim found As Variant 
    Dim QtyBought As Integer 
    Dim TotalCost As Double 

    Set MyRange = Worksheets("Data").UsedRange '<-- the range containing the data provided 

    found = Application.Match(ProductCode, MyRange.Columns(1), 0) '<-- try getting ow index of prodcut code in 1st column of "MyRange" range 
    If IsError(found) Then '<--| if no match found... 
     MsgBox "The value entered was not found!" & vbCrLf & vbCrLf & "Please, try again", vbCritical + vbOKOnly '<-- inform the user and loop again 
     Exit Sub '<--| exit sub to get another product code 
    End If 

    With MyRange(found, 1) '<-- reference the matching cell 
     Cost = .Offset(0, 1).Value '<--| store "Cost from cell 1 column to the right of the referenced one 
     MinQty = .Offset(0, 2).Value '<--| store "MinQty" from cell 2 columns to the right of the referenced one 
     Discount = .Offset(0, 3).Value '<--| store "Discount" from cell 3 columns to the right of the referenced one 
    End With 

    'Obtaining QtyBought Value 
    QtyBought = Application.InputBox("Enter the QtyBought ordered.", Type:=1) '<--| force numeric input 

    'finding out the cost of the product ordered. 
    TotalCost = Selection.Value * QtyBought '<--shouldn't this be: TotalCost = Cost * QtyBought 
    Discount = Selection.Value * Discount '<--shouldn't this be: Discount = TotalCost * Discount 
    'Obtaining discount rate 
    If QtyBought > MinQty Then 
     MsgBox ("You purchased " & QtyBought & "units of product " & ProductCode & ".The total cost is " & Format(TotalCost, "$#,##0") & "Because you purchased at least " & MinQty & "units, you get a discount of " & Discount & "on each unit") 
    Else 
     MsgBox ("Sorry, You don't qualify for any discount") 
    End If 
End Sub 
+0

ありがとうそんなに再び!しかし、同じことを達成するためにFORループ内に元のコードを含めることが可能であるかどうか尋ねることはできますか? –

関連する問題