У меня есть UserForm, который содержит 20 Comboboxes, а затем 3 соответствующих текстовых поля рядом с каждым Combobox (так всего 60 текстовых полей). Каждый Combobox отображает те же самые два варианта (выбор 1 и выбор 2). 3 текстовых поля рядом с Combobox предназначены для описания, количества элементов и цены за элемент соответственно.Почему цикл For повторяет процедуру?
Я использовал цикл For, чтобы зацикливать 20 Comboboxes. Код, находящийся в цикле, записывает входы в текстовые поля в лист Excel в формате таблицы. Назначение Combobox состоит в том, чтобы разделить входы в текстовые поля на два варианта (выбор 1 и 2) в таблице на листе Excel.
Код, похоже, работает для первого Combobox, но когда я ввожу данные для второго Combobox и его соответствующих текстовых полей, данные на листе 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
Спасибо заранее.
Я _guessing_, потому что каждый раз, когда вы перебираете «ComboBoxes», вы прокручиваете каждый «TextBox». Вам нужно как-то связать друг друга. – Bugs
Точно, я тоже так думаю. Я просто не знаю, как это сделать. –
Я привел пример кода, который может помочь вам сгруппировать элементы управления. Я не углубляюсь в код, но это может дать вам начало. Дайте мне знать ваши мысли, когда вы получите шанс. – Bugs