【发布时间】:2018-04-15 14:43:47
【问题描述】:
我对VBA有点陌生,我想我对如何使用它有一个基本的了解。我的用户表单运行良好,但在我不喜欢的非常特定的条件下。只有当且仅当我首先运行主代码时,它才能绘制复选框,即使这样,它也只能在第一次运行并且不会根据工作簿中的更改进行更新。我认为这是由于需要运行公共变量,但在测试了该理论之后,问题仍然存在。谁能帮我解决这个问题?这是什么原因造成的?
这是我的主要代码:
Public Allplans As Integer
Sub Compare()
Allplans = Sheets.Count - 2
UF1.Show
''''Clear old series
For Each Series In Sheets(2).SeriesCollection
Sheets(2).SeriesCollection(1).Delete
Next
''''Add new series
For i = 1 To Allplans
Sheets(2).SeriesCollection.NewSeries
Sheets(2).SeriesCollection(i).Name = Sheets(i + 2).Range("$A$1")
Sheets(2).SeriesCollection(i).XValues = Sheets(i + 2).Range("$A$10:$A$23")
Sheets(2).SeriesCollection(i).Values = Sheets(i + 2).Range("$B$10:$B$23")
Next
End Sub
这是我的用户表单:
Private Sub UF1_Initialize()
Dim i As Integer
Dim chkBox As MSForms.CheckBox
For i = 1 To Allplans
Set chkBox = UF1.Frame1.Controls.Add("Forms.CheckBox.1", "CheckBox" & i)
chkBox.Caption = Sheets(i + 2).Name
chkBox.Left = 10
chkBox.Top = 5 + ((i - 1) * 20)
chkBox.Value = True
Next
End Sub
【问题讨论】:
-
什么是
UF1_Initialize?如果这是初始化事件,则名称为 UserForm_Initialize,无论表单的名称是什么。你真的在表单的代码里面使用表单的名称:Set chkBox = UF1.Frame1.Controls.Add("Forms.CheckBox.1", "CheckBox" & i)吗?不要那样做!你也不需要一个全局变量,但那是另一回事。最后一点:不要使用用户表单的default instance。
标签: vba excel checkbox userform