excel 2007 vba добавить имена листов элементов в список

Использование Excel 2007 VBA

Имейте лист «Dashboard», другие листы, но некоторые специальные листы задач, которые могут быть где угодно в книге, но всегда будут находиться между листами «TaskNew» и «TaskEnd». Эти специальные листы заданий будут различаться по количеству.

После активации панели управления необходимо заполнить поле списка именами всех специальных листов задач, чтобы пользователь мог выбрать раскрывающийся список формы листа и перейти к этому листу.

Следующие результаты приводят к ошибке выполнения «438». Объект не поддерживает это свойство или метод:

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Dim StartIndex As Integer
Dim EndIndex As Integer
Dim LoopIndex As Integer
'Dim sht As Worksheet
StartIndex = Sheets("TaskNew").Index + 1
EndIndex = Sheets("TaskEnd").Index - 1
For LoopIndex = StartIndex To EndIndex
    'SheetsNavigationDropDown.AddItem Sheets(LoopIndex).Name
    'Sheets("Dashboard").ListBox20.AddItem Sheets("Sample").Name
    Sheets("Dashboard").ListBox20.AddItem Sheets(LoopIndex).Name
Next LoopIndex

Я пробовал это также как просто ListBox20.AddItem... но все равно не работает. Да, ListBox20 существует в Sheets("Dashboard"), да, я отредактировал его имя, чтобы убрать пробелы.

Он задыхается/подсвечивает строку Sheets("Dashboard").List.... при отладке.

Идеи?


person Kirk Hings    schedule 23.07.2010    source источник


Ответы (2)


Можно также начать с проверки работоспособности:

Dim o As OLEObject

Debug.Print "---"
For Each o In Sheets("Dashboard").OLEObjects
    Debug.Print o.Name & " = " & o.progID
Next o
Debug.Print "---"

и вы должны получить ListBox20 = Forms.Listbox.1 в качестве одного из результатов

(изменить: это все равно работает в Excel 2003)

person barrowc    schedule 23.07.2010

Извините, ответил на мой собственный вопрос, ключ был в том, чтобы переключиться на элемент формы ActiveX вместо обычного.

Sheets("Dashboard").TaskSheetsComboBox.Clear
Dim StartIndex As Integer
Dim EndIndex As Integer
Dim LoopIndex As Integer
StartIndex = Sheets("TaskNew").Index + 1
EndIndex = Sheets("TaskEnd").Index - 1
For LoopIndex = StartIndex To EndIndex
    Sheets("Dashboard").TaskSheetsComboBox.AddItem Sheets(LoopIndex).Name
Next LoopIndex

Private Sub TaskSheetsComboBox_Click()
    Sheets(Sheets("TaskNew").Index + TaskSheetsComboBox.ListIndex + 1).Activate
End Sub
person Kirk Hings    schedule 23.07.2010