Я пытаюсь заполнить список (управление ActiveX). Этот список находится на листе с надписью «Информационная панель» моей книги, а не в пользовательской форме. Я хочу заполнить его диапазоном из листа с надписью «Данные».
Моя проблема в том, что если я заполню ее в процедуре открытия рабочей книги, я получаю сообщение об ошибке, когда рабочая книга открывается, что она «Не может выполняться в режиме приостановки». Однако активных точек останова нет.
Если я заполню его в процедуре активного события рабочего листа «Панель мониторинга», он не будет заполняться, когда рабочая книга открыта. Он заполняется только в том случае, если я нажимаю на другой рабочий лист, а затем возвращаюсь к рабочему листу панели инструментов, после чего он заполняется.
Есть ли лучший способ заполнить список, чтобы он всегда был заполнен и готов к работе? У меня есть много функций vLookup, связанных со списком, и если список не заполнен, остальная часть моего кода не будет работать.
Я опубликую свои коды, которые у меня есть до сих пор. Во-первых, когда я пытаюсь заполнить список с помощью даже процедуры workbook_open. Второй — через процедуру активации рабочего листа «Панель инструментов».
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