2010-07-23 10 views
0

l'aide d'Excel 2007 VBAExcel 2007 vba ajouter des noms de feuille d'élément à listBox

Avoir une feuille « Tableau de bord », ont d'autres feuilles, mais quelques feuilles de tâches spéciales qui peuvent être partout dans le livre, mais se trouve toujours entre les feuilles "TaskNew" et "TaskEnd". Ces feuilles de tâches spéciales varient en nombre. Lors de l'activation du tableau de bord, vous voulez remplir la zone de liste avec les noms de toutes les feuilles de tâches spéciales, afin que l'utilisateur puisse sélectionner une forme de feuille déroulante et naviguer vers cette feuille.

Les résultats suivants en erreur d'exécution « 438 » Cet objet ne gère pas cette propriété ou méthode:

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 

Je l'ai essayé aussi juste ListBox20.AddItem ... mais ne fonctionne toujours pas. Oui, ListBox20 existe sur Sheets ("Dashboard"), oui j'ai modifié son nom pour éliminer les espaces.

Il étouffe/met en surbrillance le Sheets ("Dashboard"). Liste .... ligne lors du débogage.

Des idées?

Répondre

0

Désolé, répondu à ma propre question, la clé était de passer à un élément de forme activex au lieu de régulier.

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

pourrait tout aussi bien commencer par un contrôle de santé mentale:

Dim o As OLEObject 

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

et vous devriez obtenir ListBox20 = Forms.Listbox.1 comme l'un des résultats

(edit: cela fonctionne dans Excel 2003 de toute façon)