私は、20のコンボボックスとそれぞれのコンボボックスの隣に3つのそれぞれのテキストボックス(したがって、合計60のテキストボックス)を含むユーザーフォームを持っています。各コンボボックスは同じ2つのオプション(選択肢1と選択肢2)を表示します。コンボボックスに隣接する3つのテキストボックスは、説明、項目数、項目ごとの価格です。Forループがプロシージャを複製するのはなぜですか?
私はForループを使用して20個のComboboxをループしました。ループ内のコードは、テキストボックスの入力をExcelシートにテーブル形式で書き込みます。コンボボックスの目的は、テキストボックスの入力をExcelシートの表の2つのオプション(選択肢1と2)に分割することです。
コードは最初のコンボボックスでは機能しているようですが、2番目のコンボボックスとそれぞれのテキストボックスのデータを入力すると、Excelシートのデータが数回複製されてしまいます。
これはコードです:事前に
Dim i as Integer 'row counter
Dim j As Integer
Dim h As Integer
Dim ctrl As Control
Dim num As Integer
Dim txt As Control
For Each ctrl In Me.custom_prices.Controls
If TypeName(ctrl) = "ComboBox" Then
If ctrl = "Choice 1" Then
j = i
For Each txt In Me.custom_prices.Controls
If TypeName(txt) = "TextBox" And txt.Tag = "DESCRIPTION" Then
For num = 1 To 20
If txt.Value = "" Then Exit For
If Controls("textbox" & num).Value = "" Then Exit For
If Controls("textboxprice" & num).Value = "" Then Exit For
If Controls("textboxno" & num).Value = "" Then Exit For
ActiveCell.Offset(rowOffset:=j, columnOffset:=0).Value = Controls("textbox" & num).Value
ActiveCell.Offset(rowOffset:=j, columnOffset:=1).Value = Controls("textboxprice" & num).Value
ActiveCell.Offset(rowOffset:=j, columnOffset:=2).Value = Controls("textboxno" & num).Value
ActiveCell.Offset(rowOffset:=j, columnOffset:=3).Value = Controls("textboxno" & num).Value * Controls("textboxprice" & num).Value
j = j + 1
sub_total = sub_total + (Controls("textboxno" & num).Value * Controls("textboxprice" & num).Value)
Next num
End If
Next txt
i = j
sub_total_3 = sub_total
sub_total = 0
ElseIf ctrl = "Choice 2" Then
h = i
For Each txt In Me.custom_prices.Controls
If TypeName(txt) = "TextBox" And txt.Tag = "DESCRIPTION" Then
For num = 1 To 20
If txt.Value = "" Then Exit For
If Controls("textbox" & num).Value = "" Then Exit For
If Controls("textboxprice" & num).Value = "" Then Exit For
If Controls("textboxno" & num).Value = "" Then Exit For
ActiveCell.Offset(rowOffset:=h, columnOffset:=0).Value = Controls("textbox" & num).Value
ActiveCell.Offset(rowOffset:=h, columnOffset:=1).Value = Controls("textboxprice" & num).Value
ActiveCell.Offset(rowOffset:=h, columnOffset:=2).Value = Controls("textboxno" & num).Value
ActiveCell.Offset(rowOffset:=h, columnOffset:=3).Value = Controls("textboxno" & num).Value * Controls("textboxprice" & num).Value
h = h + 1
sub_total = sub_total + (Controls("textboxno" & num).Value * Controls("textboxprice" & num).Value)
Next num
End If
Next txt
i = h
sub_total_4 = sub_total
sub_total = 0
Else: ctrl = ""
sub_total = sub_total
End If
End If
Next ctrl
感謝。
私はあなたが 'ComboBoxes'をループするたびに、それぞれの' TextBox'をループしているからです。あなたは何とか2人を結びつけて見る必要があります。 – Bugs
まさに、私もそうだと思います。私はそれを行う方法がわかりません。 –
あなたのコントロールをグループ化するのに役立ついくつかのサンプルコードを提供しました。私はコードに深くはいないが、それはあなたにスタートを与えるかもしれない。あなたがチャンスを取ったときにあなたの考えを知らせてください。 – Bugs