Я создаю приложение для регистрации тренировок, которое позволяет пользователю добавлять движение, количество повторений и соответствующий вес во время работы пользовательской формы. (Вы также можете думать об этом как о «подборе заказов», например: «3», «красный», «карандаши», «2», «синие», «маркеры» и т. Д. c.)
. Код добавляет два текстовых поля и поле со списком при нажатии кнопки «+».
При нажатии кнопки «-» будет удалена только последняя добавленная группа элементов управления, но если нажать кнопку «-» снова я получу сообщение об ошибке «Catastrophi c Failure».
Я почти уверен, что эти элементы управления необходимо удалить с помощью controls.remove (object).name
, но как только эта последняя группа будет удалена, мне потребуется обновите переменную объекта до следующей группы, которая может быть удалена, с чем я борюсь.
Здесь я нашел похожие вопросы с ответами, но они удалили все элементы управления пользовательской формы. Я хочу удалить только последнюю добавленную группу.
Option Explicit
Public movementCounter As Integer
Public repsTextBox As Object
Public movementComboBox As Object
Public weightTextBox As Object
Public cntrlsColl As Collection
Private Sub addMvmtCmndButt_Click()
movementCounter = movementCounter + 1
Set repsTextBox = Controls.Add("Forms.TextBox.1")
Set movementComboBox = Controls.Add("Forms.ComboBox.1")
Set weightTextBox = Controls.Add("Forms.TextBox.1")
With repsTextBox
.Name = "RepsTextBox" & movementCounter
.Height = 18
.Width = 45
.Left = 10
.Top = 30 * (movementCounter - 1) + 5
End With
With movementComboBox
.Name = "MovementComboBox" & movementCounter
.Height = 18
.Width = 90
.Left = 65
.Top = 30 * (movementCounter - 1) + 5
.RowSource = listsSht.Range("movementList").Address
End With
With weightTextBox
.Name = "WeightTextBox" & movementCounter
.Height = 18
.Width = 45
.Left = 165
.Top = 30 * (movementCounter - 1) + 5
End With
End Sub
Private Sub deleteMvmtCmndButt_Click()
'Works, but only for the most recently added group of controls
With Me.Controls
.Remove repsTextBox.Name
.Remove movementComboBox.Name
.Remove weightTextBox.Name
End With
'update what the next group of controls will be on-deck
' If movementCounter > 0 Then
' repsTextBox.Name = "RepsTextBox" & movementCounter
' movementComboBox.Name = "MovementComboBox" & movementCounter
' weightTextBox.Name = "WeightTextBox" & movementCounter
' End If
End Sub