vba excel如果最后一次迭代出现条件错误

时间:2018-04-17 09:16:27

标签: vba excel-vba if-statement excel

我让代码从我的复选框中获取输入并从相关工作表中获取数据。我逐行运行它,发现它总是在最后一个循环的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在下面指出的那样,添加一个明确的名称"复选框"在那里做了伎俩(我不知道你能做到这一点)。索引1可能是由用户表单中的一个按钮或框架拍摄的,导致它脱落设置。

1 个答案:

答案 0 :(得分:0)

我猜你的主要问题来自于必须从索引0开始访问控件的事实。所以要遍历所有控件,你会做类似的事情

git diff

因此,当您坚持使用代码时,我认为您必须将if语句更改为

For counter = 0 To Me.Frame1.Controls.Count - 1
    Debug.Print counter; Me.Frame1.Controls(counter).Name
Next counter