Доступные элементы управления в Excel VBA Userform

66
10

Я создаю элементы управления формами в пользовательской форме и с трудностями в их доступе после создания. Количество ComboBoxes и TextBoxes зависит от ввода пользователем. Я использую CommandButton для определения правильного синтаксиса, но я не могу найти элемент управления. Я использовал несколько различных соглашений об именах внутри метода CommandButton_Click и ничего не работает.

Мой код для пользовательской формы для создания моих элементов управления выглядит следующим образом:

Sub createDetails()

Dim details As Variant

details = TextBox3.Value
remainTot = TextBox2.Value

If TextBox3.Value = "" Or TextBox3.Value = 0 Then
MsgBox "Must have at least 1 detail"
Exit Sub
Else
End If

For i = 1 To details

n = i - 1

Dim SubPay As Control
Dim CatPay As Control
Dim AmtPay As Control

Set theLbl = frmInvoice.Controls.Add("Forms.Label.1", "lbl_" & i, True)
With theLbl
.Caption = "Detail " & i
.Left = 20
.Width = 60
.Top = n * 24 + 110
.Font.Size = 10
End With

Set SubPay = frmInvoice.Controls.Add("Forms.ComboBox.1", "SubComboBox_" & i, True)
With SubPay
.Top = 108 + (n * 24)
.Left = 60
.Height = 18
.Width = 100
.Name = "subBox" & i
.Font.Size = 10
.TabIndex = n * 3 + 6
.TabStop = True
.RowSource = "PayeeList"
End With

Set CatPay = frmInvoice.Controls.Add("Forms.ComboBox.1", "CatComboBox_" & i, True)
With CatPay
.Top = 108 + (n * 24)
.Left = 165
.Height = 18
.Width = 100
.Name = "catBox" & i
.Font.Size = 10
.TabIndex = n * 3 + 7
.TabStop = True
.RowSource = "CatList"
End With

Set AmtPay = frmInvoice.Controls.Add("Forms.TextBox.1", "AmtTextBox" & i, True)
With AmtPay
.Top = 108 + (n * 24)
.Left = 270
.Height = 18
.Width = 50
.Name = "amtBox" & i
.Font.Size = 10
.TabIndex = n * 3 + 8
.TabStop = True

End With

Next i

Dim TBox As Control

Set TBox = frmInvoice.Controls.Add("Forms.TextBox.1", "TotalLbl", True)
With TBox
.Top = 130 + ((details - 1) * 24)
.Left = 270
.Height = 18
.Width = 50
.Name = "totBox"
.Font.Size = 10
'.TabIndex = (details - 1) * 3 + 9
.TabStop = False
.Value = TextBox2.Value

End With

Set theLbl = frmInvoice.Controls.Add("Forms.Label.1", "totLbl", True)
With theLbl
.Caption = "Total"
.Left = 225
.Width = 40
.Top = 135 + ((details - 1) * 24)
.Font.Size = 10
End With

frmInvoice.Height = 200 + details * 24
With CommandButton1
.Top = 150 + details * 24
.TabStop = True
.TabIndex = (details - 1) * 3 + 9
End With

With CommandButton2
.Top = 150 + details * 24
.TabStop = False
'.TabIndex = (details - 1) * 3 + 10
End With

End Sub

Код для CommndButton, который не работает:

Private Sub CommandButton1_Click()

frmInvoice.Controls("amtBox1").Value = 1
frmInvoice.Controls(amtBox1).Value = 2
frmInvoice.Controls(AmtTextBox1).Value = 3
frmInvoice.Controls("AmtTextBox1").Value = 4

End Sub

Любая помощь приветствуется.

Снимок экрана моей пользовательской формы:

My userform

спросил(а) 2021-01-19T14:54:28+03:00 9 месяцев назад
1
Решение
79

Я думаю, что ваша ошибка из-за

Private Sub CommandButton1_Click()

frmInvoice.Controls("amtBox1").Value = 1 'is true
frmInvoice.Controls(amtBox1).Value = 2 'is false because there isn't double quotes
frmInvoice.Controls(AmtTextBox1).Value = 3 'is false because there isn't dobule quotes
frmInvoice.Controls("AmtTextBox1").Value = 4 'is false the AmtTextBoxt1 name is changed "amtBox1"

End Sub

enter image description here

Маби, ты хочешь этого?

Private Sub CommandButton1_Click()
Dim i As Integer
Dim total As Currency
With frmInvoice
For i = 1 To TextBox3.Value
total = total + .Controls("amtBox" & i).Value
Next i
.Controls("totBox").Text = Format(total, "####.00")
End With

End Sub

ответил(а) 2021-01-19T14:54:28+03:00 9 месяцев назад
46

Попробуйте использовать

frmInvoice.Controls("amtBox1").Text 

вместо

frmInvoice.Controls("amtBox1").Value

ответил(а) 2021-01-19T14:54:28+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема