【问题标题】:VBA: Populating ListBox ActiveX control, on worksheet and not user formVBA:在工作表而不是用户表单上填充 ListBox ActiveX 控件
【发布时间】:2016-04-18 04:58:45
【问题描述】:

我正在尝试填充列表框(ActiveX 控件)。此列表框位于我的工作簿的标有“仪表板”的工作表上,而不是用户表单上。我想用标有“数据”的工作表中的范围填充它。

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

如果我在“仪表板”工作表活动事件过程中填充它,当工作簿打开时它不会填充。只有当我单击另一个工作表时才会填充,然后返回仪表板工作表,然后才会填充。

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

我将发布我目前拥有的代码。第一个是当我尝试通过 workbook_open 偶数过程填充列表框时。第二种是通过“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

【问题讨论】:

  • 您是否尝试在 Dashboard 工作表上创建一个公共函数以填充列表,并在 Workbook_Open() 上调用此函数?
  • 我也试过了,但是打开工作簿时它仍然不会填充。公共函数 addListsWorksheetActivate()

标签: vba excel listbox listbox-control


【解决方案1】:

您将 cPlanets 声明为 MSForms.ListBox,但在您的问题中您说您正在使用工作表上的 ActiveX 列表框。所以你应该将 cPlanets 声明为一个对象,比如:

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

【讨论】:

  • 谢谢,我现在改成你的建议了。但是,如果我在 workbook_open 过程中键入它,它仍然不会填充它,因为它错误地认为它在打开时处于中断模式,但在中断模式上没有任何代码行。
【解决方案2】:

我在另一台计算机上尝试了此代码,它可以工作。似乎是导致问题的计算机配置。该代码在多台不同的计算机上运行良好。

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2017-08-07
    • 2019-01-24
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多