2017-08-29 2 views
0

Une personnalisation VSTO au niveau du document pour Excel enregistre un gestionnaire d'événements - OnSheetChangeEventHanlder - pour l'événement de la feuille de calcul Change.Personnalisation VSTO pour Excel: le gestionnaire d'événements ne fonctionne pas si plusieurs fichiers Excel sont ouverts

using Excel = Microsoft.Office.Interop.Excel; 

public partial class ThisWorkbook 
{ 
    private void InternalStartup() 
    { 
     this.Open += ThisWorkbookOpen; 
    } 

    private void ThisWorkbookOpen() 
    { 
     Excel.Sheets sheets = this.Sheets; 
     Excel.Worksheet sheet = null; 

     for (int i = 1, length = sheets.Count; i <= length; i++) 
     { 
      sheet = sheets[i]; 

      sheet.Change += OnSheetChangeEventHanlder; 
     } 

     if (sheet != null) Marshal.ReleaseComObject(sheet); 
     if (sheets != null) Marshal.ReleaseComObject(sheets); 
    } 

    private void OnSheetChangeEventHanlder(Excel.Range Target) 
    { 
     // .. 
    } 
} 

Comme prévu, OnSheetChangeEventHanlder est appelé toutes les données de feuille de temps sont modifiées. Cependant, si nous ouvrons deux documents Excel avec la même personnalisation et que nous essayons de modifier les données de la feuille dans l'un d'entre eux, OnSheetChangeEventHanlder n'est pas appelé. Cela semble déroutant, d'autant plus que c'est une personnalisation au niveau du document qui m'amène à penser que les instances de personnalisation doivent être isolées les unes des autres. Donc, pour résumer: pourquoi la présence d'un autre fichier Excel ouvert empêche l'enregistrement d'événements ou l'exécution de gestionnaires d'événements personnalisés?

Répondre

0

Eh bien, je n'ai pas réussi à résoudre ce problème ou à trouver une explication, et je me suis retrouvé avec une solution: supprimer et rattacher OnSheetChangeEventHandler dans un autre gestionnaire d'événements souscrit à this.ActivateEvent.