VBA:在工作表而不是用户表单上填充ListBox ActiveX控件

时间:2016-04-18 04:58:46

标签: vba excel-vba listbox listbox-control excel

我正在尝试填充列表框(ActiveX控件)。此列表框位于标有" Dashboard"我的工作簿,而不是用户表单。我想用标有" Data"。

的表单中的范围填充它

我的问题是,如果我在工作簿打开事件过程中填充它,我会在工作簿打开时出现错误,它无法在中断模式下执行。"但是,根本没有活动的断点。

如果我在" Dashboard"上填充它工作表活动事件过程,它不会在工作簿打开时填充。它只会填充,如果我点击另一个工作表,然后返回到仪表板工作表,然后它将填充。

是否有更好的方法来填充列表框,以便它始终填充并准备好了?我有很多与列表框关联的vLookup函数,如果没有填充列表框,那么我的其余代码将无法正常工作。

我将发布我到目前为止的代码。第一种是当我尝试通过workbook_open even过程填充列表框时。第二个是通过" Dashboard"工作表激活程序。

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

下一个代码是我在Sheet3代码工作表激活过程

上的代码
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

2 个答案:

答案 0 :(得分:0)

您将cPlanets声明为MSForms.ListBox,但在您的问题中,您说您正在使用工作表上的ActiveX列表框。因此,您应该将cPlanets声明为Object,例如:

Dim cPlanets As Object
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets

答案 1 :(得分:0)

我在另一台计算机上试过这个代码,但它确实有效。似乎是导致问题的计算机配置。代码在几台不同的计算机上运行正常。