我正在尝试填充列表框(ActiveX控件)。此列表框位于工作簿中标记为"仪表板"的工作表上,而不是用户窗体。我希望用标记为"数据"的工作图中的区域填充它。
我的问题是,如果我在工作簿打开事件过程中填充它,当工作簿打开时,我会得到一个错误,即"无法在中断模式下执行"。但是,根本没有活动的断点。
如果我在"Dashboard"工作表活动事件过程中填充它,则当工作簿打开时,它不会填充。只有当我单击另一个工作表,然后返回到Dashboard工作表,它才会填充。
有没有更好的方法来填充列表框,使其始终填充并准备就绪?我有很多与列表框相关的vLookup函数,如果没有填充列表框,那么我的其余代码将无法工作。
我将发布我迄今为止的代码。第一种是当我试图通过workbook_open even过程填充列表框时。第二个是通过"仪表板"工作表激活程序。
Private Sub Workbook_Open()
Dim strName As String
Dim blDone As Boolean
Dim cPlanets As MSForms.ListBox
Dim vArray As Variant
Dim shtData As Worksheet
Dim wkbSolarSystem As Workbook
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm")
Set shtData = wkbSolarSystem.Worksheets("Data")
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets
vArray = shtData.Range("Planets").value
cPlanets.List = vArray
cPlanets.ListIndex = 3
'input box message for user when workbook opens up
strName = InputBox("Hello! Please enter your name", "Welcome!")
'check if there is a name entered via loop and if statement
Do
If Len(strName) = 0 Then
'if no name entered, ask user again
MsgBox ("Please enter a valid name to continue"), vbCritical, "Valid Name Required"
'ask user to type in name again
strName = InputBox("Hello! Please enter your name", "Welcome!")
Else
'display message with information for user
MsgBox ("Hello, " & strName)
blDone = True
End If
'finish loop statement
Loop Until blDone = True
下一个代码是我在表3代码工作表激活程序上的代码
Private Sub Worksheet_Activate()
Dim shtData As Worksheet
Dim wkbSolarSystem As Workbook
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm")
Set shtData = wkbSolarSystem.Worksheets("Data")
lstPlanets.List = shtData.Range("Planets").value
lstPlanets.ListIndex = 3
End Sub
您正在将cPlanets声明为MSForms。ListBox,但在您的问题中,您说您正在使用工作表上的ActiveX列表框。所以你应该将cPlanets声明为Object,比如:
Dim cPlanets As Object
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets
我在另一台计算机上尝试了这段代码,它很有效。似乎是计算机配置造成了问题。该代码在几台不同的计算机上正常工作。