2009-04-15 8 views
7

Je travaille sur une application de console vb.net qui ouvre un certain nombre de feuilles de calcul un par un, lit dans quelques cellules et ferme le fichier.Excel Automation - comment dire non

Certaines feuilles de calcul ont des formules qu'Excel recalcule lorsque j'ouvre le fichier et une boîte de dialogue me demande si je souhaite enregistrer les modifications dans la feuille de calcul lorsque je la ferme.

Message: « Voulez-vous enregistrer les modifications apportées à MYFILE.xls formules Microsoft Office Excel recalcule lorsque l'ouverture des fichiers sauvegardés par une dernière version antérieure d'Excel? »

Comment puis-je refuser automatiquement cette boîte de dialogue?

  Dim newCBD As New CBD 
      Dim xlApp As Excel.Application 
      Dim xlWorkBook As Excel.Workbook 
      Dim xlWorkSheet As Excel.Worksheet 

      xlApp = New Excel.ApplicationClass 
      xlWorkBook = xlApp.Workbooks.Open(myFile) 
      xlWorkSheet = xlWorkBook.Worksheets(1) 

      ...do a bunch of junk here 

      xlWorkBook.Close() 
      xlApp.Quit() 

Merci!

+0

En ajoutant des informations ici, Excel recalculera automatiquement les formules si la version du programme est plus récente que la version du fichier. – pensono

Répondre

13

Vous devez fournir un paramètre False sur la méthode Close

xlWorkBook.Close(False) 

De VBA Excel Help:

méthode Close qu'il applique à l'objet Workbook .

Ferme l'objet.

expression.Close (SaveChanges, Nom du fichier, RouteWorkbook)

expression requise. Une expression qui renvoie l'un des objets ci-dessus.

SaveChanges En option Variante. Si il n'y a pas de modifications apportées au classeur, cet argument est ignoré. Si des modifications sont apportées au classeur et que le classeur apparaît dans d'autres fenêtres ouvertes, cet argument est ignoré. Si il y a des changements dans le classeur mais le classeur ne figure pas dans les autres fenêtres ouvertes, cet argument spécifie si des changements doivent être sauvés, comme indiqué dans le tableau ci-dessous .

Valeur Action True Enregistre les modifications dans le classeur. Si aucun nom de fichier n'est associé au classeur , le nom de fichier est utilisé. Si FileName est omis, l'utilisateur doit indiquer pour fournir un nom de fichier. False Ne pas enregistrer les modifications apportées à ce fichier. Omis Affiche une boîte de dialogue demandant à d'enregistrer ou non les modifications .

FileName Variante optionnelle. Enregistrer modifications sous ce nom de fichier.

Variante facultative RouteWorkbook. Si le classeur n'a pas besoin d'être routé vers le destinataire suivant (s'il n'a pas de fiche de routage ou a déjà été acheminé), cet argument est ignoré. Sinon, Microsoft Excel route le classeur comme indiqué dans le tableau suivant.

Valeur Signification True Envoie le classeur au destinataire suivant. False Ne pas envoyer le classeur. Omitted Affiche une boîte de dialogue demandant à l'utilisateur si le classeur doit être envoyé.

1

Il est bon d'utiliser Close() pour éviter ce message d'erreur, mais si vous utilisez la version comme v11.0 qui ont close() qui ne prend aucun paramètre de sorte que le problème ne résout pas ce cas. Pour résoudre ce problème, vous pouvez utiliser Marshal.RealeaseCOMObject MAIS n'oubliez pas qu'il y a quelques issues avec cela.

En réponse à votre "comment dire non", vous pouvez utiliser:

xlApp.DisplayAlerts= false; // use just above the Close() method calls 
xlApp.Workbooks.Close(); // here no arguments can be used. 

Hope it helps!

Questions connexes