1

我正在构建一个锻炼记录应用程序,允许用户在用户窗体运行时添加运动、代表次数和相关的重量。(您也可以将其视为“拣货”,例如“3”“红色”“铅笔”、“2”“蓝色”“马克笔”等)

单击“+”按钮时,代码会添加两个文本框和组合框。

单击“-”按钮时,只会删除最后添加的控件组,但如果再次单击“-”按钮,我将收到“Catastrophic 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
4

1 回答 1

1

Try the following code...

Private Sub deleteMvmtCmndButt_Click()

    If movementCounter > 0 Then
        With Me.Controls
            .Remove "RepsTextBox" & movementCounter
            .Remove "MovementComboBox" & movementCounter
            .Remove "WeightTextBox" & movementCounter
        End With
        movementCounter = movementCounter - 1
    End If

End Sub

Hope this helps!

于 2020-01-20T23:12:07.590 回答