最终迭代时vba excel If条件错误

最终迭代时vba excel If条件错误,vba,excel,if-statement,Vba,Excel,If Statement,我让代码从我的复选框中获取输入,并从相关工作表中获取数据。我逐行运行它,发现它总是在最后一个循环的If语句中出现运行时错误。我的代码有问题吗 Option Explicit Private Sub UserForm_Initialize() Dim counter As Long Dim chkBox As MSForms.CheckBox ''''Add checkboxes based on total sheet count For counter =

我让代码从我的复选框中获取输入,并从相关工作表中获取数据。我逐行运行它,发现它总是在最后一个循环的If语句中出现运行时错误。我的代码有问题吗

Option Explicit

Private Sub UserForm_Initialize()
    Dim counter As Long
    Dim chkBox  As MSForms.CheckBox

    ''''Add checkboxes based on total sheet count
    For counter = 1 To Sheets.count - 2
        Set chkBox = Me.Frame1.Controls.Add("Forms.CheckBox.1", "CheckBox" & counter)
        chkBox.Caption = Sheets(counter + 2).Name
        chkBox.Left = 10
        chkBox.Top = 5 + ((counter - 1) * 20)
    Next

End Sub

Private Sub cmdContinue_Click()

    Dim Series As Object
    Dim counter As Long

    '''Clear old series
    For Each Series In Sheets(2).SeriesCollection
        Sheets(2).SeriesCollection(1).Delete
    Next


    ''Cycle through checkboxes
    For counter = 1 To Sheets.count - 2
        ''If the box is checked then
        If Me.Frame1.Controls(counter).Value = True Then ''Error here on 4th iteration
            ''Add new series
            With Sheets(2).SeriesCollection.NewSeries
                .Name = Sheets(counter + 2).Range("$A$1")
                .XValues = Sheets(counter + 2).Range("$A$12:$A$25")
                .Values = Sheets(counter + 2).Range("$B$12:$B$25")
            End With

        End If

    Next counter

    Me.Hide

End Sub
另外,第二个问题是它总是在错误的循环上运行。如果我选中框2,它将为框1工作表运行数据,3为2运行,4为3运行,1为4运行。有人能解释这背后的原因吗


编辑:正如VincentG在下面指出的,在其中添加一个显式名称“checkbox”就成功了(我不知道你能做到这一点)。索引1可能被用户表单中的某个按钮或框架所占用,导致其偏移。

我猜您的主要问题在于必须从索引0开始访问控件。所以要循环所有控件,您可以执行以下操作

For counter = 0 To Me.Frame1.Controls.Count - 1
    Debug.Print counter; Me.Frame1.Controls(counter).Name
Next counter
因此,当您坚持编写代码时,我假设您必须将if语句更改为

If Me.Frame1.Controls(counter-1).Value = True Then

除了复选框,您可能还有其他控件。。。例如,cmdContinue按钮。尝试使用
Me.Frame1.Controls(“复选框”&计数器)。Value=True
它总是会收到运行时错误。。。你能说得更清楚些吗?什么错误?@VincentG你的建议起了作用。它可能是其中一个按钮,或者框架位于控制组的索引1中。零索引是我在尝试解决上面提到的第二个问题。