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

Използване на 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 ("Табло за управление"), да, редактирах името му, за да премахна интервалите.

Той се задушава/откроява реда 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