2017-04-23 1 views
0

Je crée un onglet personnalisé pour Excel avec l'éditeur d'interface utilisateur personnalisée et j'ai deux contrôles DropDown dedans. Appelons-les DropDown1 et DropDown2. Mon but est que chaque fois que je change la sélection DropDown1, elle change automatiquement la sélection de DropDown2, mais je ne sais pas comment définir "SelectedItem" dans un contrôle DropDown. Jusqu'à présent, j'ai une fonction VBA qui est déclenchée chaque fois que je change la sélection de DropDown1, je pense que cela peut être utile.Comment définir l'élément sélectionné dans le contrôle du ruban DropDown personnalisé

+0

Ces listes déroulantes de validation de données ou zones de liste déroulante activeX sont-elles valides? Vous devriez poster du code pour qu'il n'y ait pas de confusion. – Amorpheuses

+0

@Amorpheuses C'est un contrôle DropDown ajouté dans le ruban d'Excel. C'est l'objet: https://msdn.microsoft.com/en-us/library/dd947478(v=office.12).aspx –

Répondre

0

Vous devez ajouter une fonction de rappel au ruban XML dans l'éditeur d'interface utilisateur personnalisée, puis ajouter le code correspondant au projet VBA à appeler lorsque l'onglet du ruban est invalidé. Le rappel dont vous avez besoin pour définir l'élément sélectionné pour le contrôle de liste déroulante est getSelectedItemIndex ou getSelectedItemID, selon que vous souhaitez sélectionner l'élément par index ou par ID. Étant donné que vous avez fourni aucun code, mon examle est général (et non testé):

Ruban XML:

<dropDown id="drpTest" label="Test dropdown" getSelectedItemIndex="drpTestGetSelectedItem" ></dropDown> 

VBA rappel

'Callback for drpTest getSelectedItemIndex 
Sub drpTestGetSelectedItem(control As IRibbonControl, ByRef returnedVal) 
    returnedVal = 1 '***** To select the item with index 1, 
         '***** replace with code to select the desired item 
End Sub 

EDIT:

Exemple dans lequel l'index est sélectionné sur une autre liste déroulante. Dans des solutions similaires, j'ai mis une valeur dans la fonction onAction d'un contrôle et utilisé pour définir l'index sélectionné dans un autre contrôle, quelque chose comme ce qui suit:

Ruban XML:

<dropDown id="drpTest1" label="Test dropdown 1" onAction="drpTest1OnAction" ></dropDown> 
<dropDown id="drpTest2" label="Test dropdown 2" getSelectedItemIndex="drpTest2GetSelectedItem" ></dropDown> 

VBA callbacks

Global myRibbon As IRibbonUI 
Global giIndex As Integer 

'Callback for customUI.onLoad 
Sub RibbonOnLoad(ribbon As IRibbonUI) 
    '***** Save reference to ribbon object to invalidate 
    Set myRibbon = ribbon 
End Sub 

'Callback for drpTest1 onAction 
Sub drpTest1OnAction(control As IRibbonControl, id As String, index As Integer) 
    '***** Set selected item variable for drpTest2 
    giIndex = index 
    '***** Tell Excel to redraw ribbon 
    '(you could invalidate only parts of the ribbon with InvalidateControl 
    'or InvalidateControlMso) 
    myRibbon.Invalidate 
End Sub 

'Callback for drpTest2 getSelectedItemIndex 
Sub drpTest2GetSelectedItem(control As IRibbonControl, ByRef returnedVal) 
    '***** Return selected item for drpTest2 based on value stored in giIndex 
    returnedVal = giIndex 
End Sub 
+0

Merci Olle! Mais je n'ai toujours pas le "comment". Donc j'ai 2 DropDown, (et comme je l'ai compris), je vais avoir 2 fonctions "getSelectedItemIndex". Ces fonctions seront appelées lorsque sa sélection DropDown changera. Donc, dans mon cas, dans la fonction "getSelectedItemIndex" de mon "DropDown1" besoin d'un code qui définit le SelectedItem de la "DropDown2". Je ne sais toujours pas comment faire ça. J'apprécierais de l'aide à ce sujet. –

+0

Le 'getSelectedItemIndex' est appelé lorsque le ruban est invalidé et doit être redessiné - donc vous l'utilisez pour décider quel index sera sélectionné. Comment décidez-vous quel indice vous appartient? Va ajouter un exemple à ma réponse. –