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

Traductions disponibles Traductions disponibles
Numéro d'article: 823988 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

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

Propriétés

Numéro d'article: 823988 - Dernière mise à jour: lundi 15 janvier 2007 - Version: 2.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Excel 2003
  • Microsoft Visual Studio Tools for the Microsoft Office System version 2003
Mots-clés : 
kbmt kbbug kbautomation kbnofix KB823988 KbMtfr
Traduction automatique
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
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com