Excel 2007 VBA добавить имена элементов списка в список - PullRequest
0 голосов
/ 23 июля 2010

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

Иметь лист «Панель инструментов», иметь другие листы, но некоторые специальные листы задач, которые могут быть где угодно в книге, но всегда будут находиться между листами «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 ("Панель инструментов"). Строка List .... при отладке.

Идеи

Ответы [ 2 ]

0 голосов
/ 23 июля 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
0 голосов
/ 23 июля 2010

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

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)1007 *

...