我让代码从我的复选框中获取输入并从相关工作表中获取数据。我逐行运行它,发现它总是在最后一个循环的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可能是由用户表单中的一个按钮或框架拍摄的,导致它脱落设置。
答案 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