Comment activer 'Snap To Grid' sur Excel démarrer avec un complément

Je search un moyen d'activer automatiquement Snap to Grid chaque fois que je lance Excel.

J'ai élaboré ce code et l'ai mis dans un Add-In (.xlam) que je charge toujours sur le démarrage d'Excel.

Private Sub Workbook_Open() Dim cbc As CommandBarControl Set cbc = Application.CommandBars.FindControl(ID:=549) If Not cbc.Enabled Then cbc.Execute End Sub 

Mais quand je démarre Excel, il lève cette erreur sur cbc.Execute :

entrez la description de l'image ici

Quelqu'un peut-il me dire ce qui ne va pas?

Je pense que vous avez deux problèmes:

Problème 1

Je crois que ce que vous essayez de faire avec la propriété Enabled est de vérifier l'état de basculement du contrôle. Au lieu de cela, je pense que vous voulez plutôt la propriété State (qui ne s'affiche pas dans Intellisense). Votre code devrait être comme ceci:

 Public Sub ActivateSnapToGrid() Dim cbc As CommandBarControl Set cbc = Application.CommandBars.FindControl(ID:=549) If Not cbc Is Nothing Then If cbc.Enabled Then 'if snap to grid is off... If cbc.State = 0 Then cbc.Execute 'State should now = -1 End If End If End If End Sub 

Problème 2

Le contrôle «Snap to grid» n'est pas activé s'il n'y a pas de document de travail (cochez ceci en fermant tous les classurs). Dans son état actuel, votre code essaie d'exécuter dans ce cas, If Not cbc.Enabled Then cbc.Execute car je pense que vous essayez de vérifier s'il est 'on' non s'il est activé.

Étant donné qu'un complément Excel se chargera comme un classur "caché", je ne crois pas qu'il permettrait le contrôle de la barre de command "Snap to Grid". Par conséquent, dans l'événement Workbook_Open du complément, le contrôle sera désactivé et c'est pourquoi vous obtenez l'erreur.

Vous avez besoin d'un gestionnaire d'events au niveau de l'application dans votre complément. Ceci est très courant pour les compléments Excel. Voir ici sur MSDN pour une explication. De plus, consultez cet article de Chip Pearson qui est très utile. Cela vous permettra d'écrire un événement pour un événement Workbook_Open généré après vos charges d'ajout.

Ainsi, vous obtiendrez ce code (par Chip Pearson) dans votre add-in pour appeler le sous-set présenté ci-dessus (dans la section problème 1):

 Private WithEvents App As Application Private Sub Workbook_Open() Set App = Application End Sub Private Sub App_NewWorkbook(ByVal Wb As Workbook) Debug.Print "New Workbook: " & Wb.Name Call ActivateSnapToGrid End Sub 

Je n'ai pas testé cela de manière approfondie car on ne sait pas comment vous avez écrit votre complément. Cependant, il s'agit d'un motif standard très (sinon le ) pour faire ce genre de choses. Voir MSDN et l'article de Chip Pearson et vous comprendrez quel code va dans une Class , dans un Module etc.