J'ai créé une interface de ruban fluide personnalisée pour Excel 2010, qui comprend une liste déroulante. Code XML pertinent (simplifié): Lorsque le ruban est chargé, aucune valeur n'est sélectionnée - la liste déroulante est vide. P> J'aimerais que le premier élément soit sélectionné par défaut - mais ne pouvait trouver aucune documentation décrivant comment faire comment faire ce. J'ai regardé le Documentation MSDN pour le contrôle mais il n'a pas couvrant ce cas. J'ai essayé diverses permutations de déclarations "HTML-like", mais elles ont été toutes rejetées par l'éditeur UI personnalisé comme invalide. Exemples de choses que j'ai essayés: p> message d'erreur: J'ai essayé d'autres attributs comme Si seulement j'avais le bon bit de la documentation, ce serait trivial, mais même la "documentation" Microsoft complète pour la personnalisation du ruban (trouvé ici était muette sur le sujet. < p> p> J'ai même essayé de voir si le schéma est situé à Alors je me tourne vers la sagesse combinée de ce forum. Vous pouvez voir de mon ratio Q / A que je ne fais pas cela très souvent ... p> Comment puis-je modifier mon XML afin que le ruban s'ouvre avec un élément arbitraire sélectionné dans la commande déroulante ? Je me contenterai d'être le premier article - mais "tout article que j'ai choisi de déclarer dans mon XML" serait préférable. P> Je recherche une solution XML pour cela - préférerais ne pas avoir à ajouter
p> L'attribut "sélectionné" n'est pas déclaré code> p> sélectionnéem code>, valeur code> et sélectionné code> dans le Onload CODE> VBA Code ou autre tour VBA. Quelle est sa force, non? ... p> p>
3 Réponses :
J'ai triché sans vergogne pour obtenir ce XML - j'ai utilisé RIBBONCREATOR 2010 . Le DefaultValue CODE> semble être défini dans la liste code> code> 'S. / code> de tous les endroits ridicules ... P> Sub GetSelectedItemIndexDropDown(control As IRibbonControl, ByRef index)
' Callbackname in XML File "GetSelectedItemIndexDropDown"
' Callback getSelectedItemIndex
Dim varIndex As Variant
varIndex = getTheValue(control.Tag, "DefaultValue")
If IsNumeric(varIndex) Then
Select Case control.ID
''GetSelectedItemIndexDropDown''
Case Else
index = getTheValue(control.Tag, "DefaultValue")
End Select
End If
End Sub
Public Function getTheValue(strTag As String, strValue As String) As String
Dim workTb() As String
Dim Ele() As String
Dim myVariabs() As String
Dim i As Integer
On Error Resume Next
workTb = Split(strTag, ";")
ReDim myVariabs(LBound(workTb) To UBound(workTb), 0 To 1)
For i = LBound(workTb) To UBound(workTb)
Ele = Split(workTb(i), ":=")
myVariabs(i, 0) = Ele(0)
If UBound(Ele) = 1 Then
myVariabs(i, 1) = Ele(1)
End If
Next
For i = LBound(myVariabs) To UBound(myVariabs)
If strValue = myVariabs(i, 0) Then
getTheValue = myVariabs(i, 1)
End If
Next
End Function
Eh bien, malheureusement, je ne peux pas facilement tester cela maintenant (je suis à la maison et l'ordinateur portable cible a été laissé au travail) mais si cela fonctionne, je serais à la fois étonné (vraiment? Mettez la valeur dans une balise ???) et très reconnaissant! Mesures égales des deux.
Le format de la balise me fait me demander si un attribut de defaultvalue = "1" code> pourrait fonctionner ... Dommage (dans ce cas) que mon ordinateur à la maison est un Mac - et un bureau pour le Mac ne 'T avoir la personnalisation du ruban. Une des nombreuses choses que Microsoft ne peut tout simplement pas avoir raison.
Ma philosophie de programmation personnelle est la suivante: «En cas de doute, truez sans vergogne». Je n'ai jamais écrit Ribbon XML avant, mais je savais de l'existence de ces éditeurs de ruban. Tout programmeur décent peut prendre la sortie même une version d'essai et faire ce qu'ils veulent. Cela dit, je suis plutôt incrédule moi-même i> que la valeur va dans la balise. (Quoi de Terre I> MMS pensant si cela est correct!) Cela peut également être spécifique à une application, et vous n'avez pas dit si vous utilisez l'accès, Excel ou autre chose ...
Je viens de le tester et ça ne marche pas. Ribboncreator génère-t-il du code VBA? Je pense que Ribboncreator génère un code VBA de la chaudière qui utilise l'élément de balise pour déterminer son comportement.
Si cela fonctionne réellement, le crédit doit vraiment i> aller à Gunter Avenir, mais que je ne peux pas le trouver ici (et il n'a pas répondu à votre question), je serai heureux de prendre tout crédit qui se soucie de me donner en son nom;)
@TMDEAN - Je soupçonne que tu as raison. Une étiquette ne doit jamais être quelque chose qui est interprété comme une instruction XML. Je soupçonne que la bonne réponse finira par être «elle ne peut pas être faite» mais je n'abandonne pas l'espoir aussi rapidement. En ce moment, j'essaie de trouver un moyen de pirater le schéma ...
TMDEAN était i> droite - ceci est réalisé grâce à des rappels VBA, mais comme vous devez les avoir à obtenir vos fonctions posséder i> fonctionner, quel est le problème d'avoir quelques-uns supplémentaires à gérer Interaction d'élément de ruban? Tag Est-ce que I> semblait être un endroit ridicule pour la MS pour la mettre.
Oui, c'est semblable à ma réponse, mais je pense que vous devez montrer le gestionnaire d'inaction. Sauf si je ne lis pas correctement le code, GetSelectedItemIndexDropDrop retournera toujours la même valeur dans cette implémentation, il sera donc impossible de modifier la valeur de la liste déroulante.
TMDEAN, GetSelectedItemindexDropDrop doit être appelé lorsque la liste déroulante est créée et que le gestionnaire d'inaction gère les actions de l'utilisateur séparément. Étant donné que la question était de définir une valeur par défaut, cela répond à la question, bien que la nécessité inévitable de VBA.
Je viens de tester le code à nouveau et vous ne pouvez en effet pas changer la valeur de la liste déroulante. Il définit la valeur par défaut correctement (sur "B"), mais vous ne pouvez pas le changer en "a". dl.dropboxusercontent.com/2784079/Test.xlsm
Donc, vous devriez utiliser le rappel d'erreur pour modifier la valeur renvoyée par GetSelectedItemindexDropDropDown pour la liste déroulante correspondante. Ils pourraient toujours être des pièces de code assez génériques, sinon assez simples.
Oui, jetez un coup d'œil à ma réponse.
Donc, la bonne réponse sera quelque part entre le vôtre et le mien. À moins que Floris ne puisse pas gérer le VBA supplémentaire, il n'est plus nécessaire d'ajouter de plus à nos réponses ou à nos commentaires.
Je peux gérer le VBA - aucun problème. Je cherchais "une magie de XML que j'avais manquée" - plus d'une prospective d'un puriste que parce que j'étais désespérément. Je suis toujours mystifié par les choses que Microsoft a simplement choisi de ne pas mettre en œuvre / exposer; et que la combinaison vide ne fait que grille. Je suppose qu'ils attendent que tout le monde utilise des méthodes dynamiques pour remplir la chute. Je pourrais avoir à recourir à cela. En attendant, je vous remercie beaucoup et laisserez la question "sans réponse" de voir si quelqu'un dans un autre fuseau horaire a des idées. Acclamations!
On dirait que vous devez utiliser VBA afin de sélectionner un élément par défaut.
citant de la Documentation pour l'élément déroulant (mon emphase): P>
GetSelecteditemid (raclect GetSelecteDitemid) P>
Spécifie le nom d'une fonction de rappel à appeler pour déterminer l'identifiant de l'élément à sélectionner dans ce contrôle. Les attributs GetSelecteditemid et GetSelectedItemindex sont mutuellement exclusifs. Si aucun attribut n'est spécifié, le contrôle ne doit pas afficher un élément sélectionné. strong> Par exemple, considérez le fragment XML suivant: P> blockQuote>
xxx pré> Dans cet exemple, la fonction de rappel GetGallerySelecteSitemid est appelée lorsque l'application doit déterminer l'élément sélectionné dans la galerie. Dans cet exemple, la fonction de rappel renvoie l'un des identificateurs renvoyés par la fonction de rappel GetItemid. Les valeurs possibles pour cet attribut sont définies par le type simple ST_Delegate, comme spécifié à la section 2.3.2. P> BlockQuote>
Selon ma lecture de la documentation, vous êtes censé gérer vous-même l'élément sélectionné actuel du filtre. Le gestionnaire GetSystececteditemid retournera l'élément actuellement sélectionné et le gestionnaire d'inaction sera mis à jour. P>
dans XML: p>
xxx pré> et dans un module de code de votre CARKBOOK: P>
Private mCurrentItemID As Variant Sub GetSelectedItemID(control As IRibbonControl, ByRef itemID As Variant) If IsEmpty(mCurrentItemID) Then mCurrentItemID = "Filter1" End If itemID = mCurrentItemID End Sub Sub OnAction(control As IRibbonControl, selectedID As String, _ selectedIndex As Integer) mCurrentItemID = selectedID End Sub
Cela nécessite que la valeur par défaut soit définie dans VBA, la mine permet de définir la valeur par défaut dans XML même si les deux nécessitent VBA.
Vous arrivez à la même conclusion que je suis arrivée à ... ça "ça ne peut pas être fait". J'ai effectivement trouvé une copie lisible humaine du schéma et avons traversé la ligne de la ligne. Aucun signe de "défaut" ou de ce type d'attribut. Donc, retour à vba c'est. Clairement à ce stade, il existe de nombreuses options. Toujours ennuyé à cette boîte vide qui me regarde jusqu'à ce que je choisisse de choisir quelque chose ...
Maintenant que je me fais mener cela pendant un moment où je commence à comprendre ce qui se passe. Lorsque le ruban doit dessiner la liste déroulante, il appellera la fonction getSelecteditemid code>; En renvoyant l'état souhaité, nous pouvons forcer l'affichage de la valeur par défaut. Et la boîte vide gênante est partie. Merci pour ton aide!
J'ai eu un problème similaire avec la descente vierge au démarrage, car rien n'a encore été fixé. Toutefois, lorsque le contrôle a été invalidé mais que la liste déroulante était déjà remplie, elle retournerait à nouveau la sélection vierge (j'ai invalidé le contrôle parce que j'ai ajouté de nouveaux éléments à la liste, donc je l'ai souhaitée reconstruit). P>
La solution, comme mentionné ici, est d'utiliser le a travaillé comme prévu. Remarque: le
Onaction = "OnactionCallback" code> est utilisé pour définir l'état et le diffuser à quiconque dans VBA; Le getsystececteditemindex = "ongetselecteditemindexcallback" code> est utilisé pour le ruban pour interroger l'état qu'il devrait afficher. P>