vba excel userform.show 不工作
vba excel userform.show not working
我对VBA有点陌生,我想我对如何使用它有基本的了解。我的用户表单 运行ning 很好,但在我不喜欢的非常特殊的条件下。当且仅当我首先 运行 主代码时,它才能绘制复选框,即使这样它也只能在第一次工作并且不会根据工作簿中的更改进行更新。我假设这是由于需要 public 变量为 运行,但在测试该理论后,问题仍然存在。谁能帮我解决这个问题?这是什么原因造成的?
这是我的主要代码:
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")
Sheets(2).SeriesCollection(i).XValues = Sheets(i + 2).Range("$A:$A")
Sheets(2).SeriesCollection(i).Values = Sheets(i + 2).Range("$B:$B")
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
处理程序中取出代码,并 运行 它在表单中的其他事件处理程序下。
你的问题中没有足够的上下文或信息来提供比这更具体的内容!
由于您没有提供那么多信息,请尝试对您的代码进行以下更改。将 UF1_Initialize
重命名为 UserForm_Initializ
并在其中使用 Me
关键字
Private Sub UserForm_Initialize()
Dim i As Integer
Dim chkBox As MSForms.CheckBox
For i = 1 To Allplans
Set chkBox = Me.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
也不要使用用户表单
的default instance
Option Explicit
Public Allplans As Integer
Sub Compare()
Dim series
Dim i As Long
Allplans = Sheets.Count - 2
Dim myUF1 As New UF1
myUF1.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")
Sheets(2).SeriesCollection(i).XValues = Sheets(i + 2).Range("$A:$A")
Sheets(2).SeriesCollection(i).Values = Sheets(i + 2).Range("$B:$B")
Next
End Sub
也是good practise to use Option Explicit
, just please also have a look here. You might also have a look at this tutorial, especially the part to add code for cancelling形式
我对VBA有点陌生,我想我对如何使用它有基本的了解。我的用户表单 运行ning 很好,但在我不喜欢的非常特殊的条件下。当且仅当我首先 运行 主代码时,它才能绘制复选框,即使这样它也只能在第一次工作并且不会根据工作簿中的更改进行更新。我假设这是由于需要 public 变量为 运行,但在测试该理论后,问题仍然存在。谁能帮我解决这个问题?这是什么原因造成的?
这是我的主要代码:
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")
Sheets(2).SeriesCollection(i).XValues = Sheets(i + 2).Range("$A:$A")
Sheets(2).SeriesCollection(i).Values = Sheets(i + 2).Range("$B:$B")
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
处理程序中取出代码,并 运行 它在表单中的其他事件处理程序下。
你的问题中没有足够的上下文或信息来提供比这更具体的内容!
由于您没有提供那么多信息,请尝试对您的代码进行以下更改。将 UF1_Initialize
重命名为 UserForm_Initializ
并在其中使用 Me
关键字
Private Sub UserForm_Initialize()
Dim i As Integer
Dim chkBox As MSForms.CheckBox
For i = 1 To Allplans
Set chkBox = Me.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
也不要使用用户表单
的default instanceOption Explicit
Public Allplans As Integer
Sub Compare()
Dim series
Dim i As Long
Allplans = Sheets.Count - 2
Dim myUF1 As New UF1
myUF1.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")
Sheets(2).SeriesCollection(i).XValues = Sheets(i + 2).Range("$A:$A")
Sheets(2).SeriesCollection(i).Values = Sheets(i + 2).Range("$B:$B")
Next
End Sub
也是good practise to use Option Explicit
, just please also have a look here. You might also have a look at this tutorial, especially the part to add code for cancelling形式