SheetBeforeDoubleCliquez sur COM Addin

J'essaie d'écrire un addin COM pour Excel XP dans C # qui désactive le double-clic sur une cellule pour l'éditer.

Je souhaite faire apparaître une boîte en disant que l'édition d'une cellule de cette façon est interdite, puis arrête toute exécution.

En AppEvents_SheetBeforeDoubleClickEventHandler la documentation de Microsoft, cela semble être une tâche très simple, vous créez un événement d'application AppEvents_SheetBeforeDoubleClickEventHandler avec la func(object sheet, Range Target, ref bool Cancel) signature func(object sheet, Range Target, ref bool Cancel) et vous définissez Cancel en vrai pour que l'exécution s'arrête.

J'ai ce qui suit:

 public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { Excel.Application app = application as Excel.Application; app.SheetBeforeDoubleClick += Excel.AppEvents_SheetBeforeDoubleClickEventHandler(beforeDoubleClick); } void beforeDoubleClick(object sheet, Excel.Range Target, ref bool Cancel) { MessageBox.Show("Cannot edit cells this way sorry."); Cancel = true; } 

La boîte de message est affichée, mais la cellule est alors mise en mode édition, mais si j'ai la même chose à partir de VBA, cela fonctionne.

La même chose se produit avec un addin VB.NET en utilisant le code suivant.

 Private WithEvents app As Excel.Application Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection app = application End Sub Sub Worksheet1_BeforeDoubleClick(ByVal obj As Object, ByVal Target As Excel.Range, ByRef Cancel As Boolean) Handles app.SheetBeforeDoubleClick MsgBox("Double-clicking in this sheet is not allowed.") Cancel = True End Sub 

Je n'ai eu aucun problème lors de l'exécution de votre code: l'annulation empêchait l'opération double-clic.

Certaines searchs ont généré les résultats suivants de MSKB: BOGUE: le paramètre Annuler pour les events Office est ignoré dans Visual Studio .NET 2003 .

Ce comportement d'ignorer le paramètre cancel semble exister pour les versions Excel 2002 et ci-dessous lors de l'utilisation du code .NET créé à l'aide de Visual Studio .NET 2003 (.NET Framework 1.1).

Il existe un travail complexe dans l'article qui implique un réglage manuel de l'assemblage Interop. Il semble très faisable, cependant, s'il y a beaucoup d'effort.

Il serait plus facile de mettre à niveau vers VS 2005 ou VS 2008. J'ai compilé mon code à l'aide de VS 2008 ciblant .NET 3.5 et j'ai exécuté mon code sur Excel 2007.

Soit dit en passant, l'user pourra saisir une valeur en tapant dans la barre de formule, en exécutant une command Copier-Coller, ou similaire. Pour empêcher l'user d'entrer une valeur, vous pouvez protéger la feuille de calcul à la place.