BOGUE : vous ne pouvez pas supprimer une ligne de liste Excel dans l'événement CommandButton Click

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 823988
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Vous avez créé une extension du code managé pour Office Excel 2003. Votre solution utilise l'événement Click d'un contrôle MSForms bouton de commande pour supprimer les lignes pour un objet List qui se trouve sur une feuille de calcul. Lorsque vous cliquez sur le bouton Supprimer la ligne de liste , la ligne n'est pas supprimée, et vous pouvez recevoir une erreur d'exécution.
Statut
Microsoft a confirmé qu'il s'agit d'un bogue dans Office Excel 2003.
Résolution
Pour résoudre ce problème, assurez-vous que bouton de commande n'est pas activé lorsque vous supprimez la ligne de la liste. Utilisez une des méthodes suivantes :
  • Définir la propriété TakeFocusOnClick de bouton de commande sur false .

    -ou-
  • RE-SELECT la sélection de feuille de calcul en cours pour sortir le focus de bouton de commande .
Contournement
Pour contourner ce problème, appliquez l'une des méthodes suivantes :
  • Définir la propriété TakeFocusOnClick pour le contrôle CommandButton sur false :
    protected void ThisWorkbook_Open(){	//Get a reference to the first worksheet.	ws = (Excel.Worksheet)(ThisWorkbook.Worksheets[1]);	//Set up the Click event handler for CommandButton1.	cb = (MSForms.CommandButton)(this.FindControl("CommandButton1"));	cb.Click+= new MSForms.CommandButtonEvents_ClickEventHandler(cbClick);	cb.TakeFocusOnClick = false;}
    CB = (MSForms.CommandButton)(this.FindControl("CommandButton1")) ; cb.Click+= nouveau MSForms.CommandButtonEvents_ClickEventHandler(cbClick) ; cb.TakeFocusOnClick = false;}

    -ou-
  • Appeler la méthode Select pour la feuille de calcul en cours sélection pour supprimer Active le bouton de commande :
    private void cbClick(){ 	ThisApplication.Selection.GetType().InvokeMember("Select",		System.Reflection.BindingFlags.Public | 		System.Reflection.BindingFlags.InvokeMethod | 		System.Reflection.BindingFlags.Instance,		null,		ThisApplication.Selection,		null);		ws.ListObjects[1].ListRows[1].Delete();}
Plus d'informations

Procédure pour reproduire le comportement

  1. Démarrez Microsoft Visual Studio .NET 2003.
  2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
  3. Dans la liste des types de projet, développez des projets de Microsoft Office System , puis cliquez sur projets Visual C# . Sélectionnez classeur Excel dans la liste modèle, puis cliquez sur OK .
  4. Cliquez sur Terminer dans l' Assistant Microsoft Office Project .
  5. Appuyez sur la touche F5 pour exécuter le projet et ouvrir le classeur dans Excel.
  6. Modifier le classeur comme suit :
    1. Sélectionnez la cellule A1.
    2. Dans le menu données , pointez sur liste , puis cliquez sur Créer une liste . La boîte de dialogue Créer une liste s'affiche. Cliquez sur OK .
    3. Ajouter un texte aux cellules A2, A3 et A4 (A2 : A4, en).
    4. Dans le menu Affichage , pointez sur barres d'outils , puis cliquez sur boîte à outils Contrôles .
    5. Dessinez un contrôle bouton de commande de la feuille de calcul. Le nom par défaut est CommandButton1 .
    6. Enregistrez le classeur et fermez Excel.
  7. Ajoutez le code suivant dans le module de code thisworkbook.cs :
    private MSForms.CommandButton cb;private Excel.Worksheet ws;protected void ThisWorkbook_Open(){	//Get a reference to the first worksheet.	ws = (Excel.Worksheet)(ThisWorkbook.Worksheets[1]);	//Set up the Click event handler for CommandButton1.	cb = (MSForms.CommandButton)(this.FindControl("CommandButton1"));	cb.Click+= new MSForms.CommandButtonEvents_ClickEventHandler(cbClick);}private void cbClick(){	try	{		//Delete the first row in the list object.		ws.ListObjects[1].ListRows[1].Delete();	}	catch (Exception ex)	{		System.Diagnostics.Debug.WriteLine(ex.Message);		MessageBox.Show(ex.Message);	}}
    ws.ListObjects[1].ListRows[1].Delete();} catch (exception ex) {System.Diagnostics.Debug.WriteLine(ex.Message) ; MessageBox.Show(ex.Message);}}
  8. Appuyez sur la touche F5 pour générer et exécuter le projet.
  9. Cliquez sur contrôle CommandButton1 .

    résultat Une exception est interceptée lors de la suppression la ligne dans la liste. Vous recevez le message d'erreur suivant
    Exception de HRESULT : 0x800A03EC

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 823988 - Dernière mise à jour : 12/08/2015 03:35:56 - Révision : 2.3

Microsoft Office Excel 2003, Microsoft Visual Studio Tools for the Microsoft Office System version 2003

  • kbnosurvey kbarchive kbmt kbbug kbautomation kbnofix KB823988 KbMtfr
Commentaires