2009-04-15 10 views
7

Estoy trabajando en una aplicación de consola vb.net que abre varias hojas de cálculo una a una, lee en un par de celdas y cierra el archivo.Automatización de Excel: cómo decir No

Algunas de las hojas de cálculo tienen fórmulas que Excel recalcula cuando abro el archivo, y me aparece un cuadro de diálogo que me pregunta si quiero guardar los cambios en la hoja de cálculo cuando la cierro.

mensaje: "¿Desea guardar los cambios a myfile.xls Microsoft Office Excel vuelve a calcular fórmulas al abrir archivos guardados por último una versión anterior de Excel?"

¿Cómo se declina automáticamente ese cuadro de diálogo?

  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() 

Gracias!

+0

Al agregar información aquí, Excel volverá a calcular fórmulas automáticamente si la versión del programa es más reciente que la versión del archivo. – pensono

Respuesta

13

Debe suministrar un parámetro falso en el método Close

xlWorkBook.Close(False) 

De Ayuda Excel VBA:

Primer método, ya que se aplica al objeto libro.

Cierra el objeto.

expression.Close (SaveChanges, Nombre de archivo, RouteWorkbook)

expresión requerida. Una expresión que devuelve uno de los objetos anteriores.

Variante opcional de SaveChanges. Si no hay cambios en el libro de trabajo, este argumento se ignora. Si hay cambios en en el libro de trabajo y el libro de trabajo aparece en otras ventanas abiertas , se ignora este argumento. Si hay cambios en el libro, pero el libro no aparece en ningún otro ventanas abiertas, este argumento especifica si los cambios deben ser salvados , como se muestra en la siguiente tabla .

Value Action True Guarda los cambios en el libro de trabajo. Si aún no hay un nombre de archivo asociado con el libro de trabajo , se utiliza FileName. Si se omite FileName, se solicita al usuario que proporcione un nombre de archivo. False No guarda los cambios en este archivo. Omitido Muestra un cuadro de diálogo que pregunta al usuario si desea guardar cambios.

FileName Variante opcional. Guardar cambios bajo este nombre de archivo.

RouteWorkbook Variante opcional. Si el libro de trabajo no necesita enrutarse al siguiente destinatario (si no tiene enrutamiento de enrutamiento o si ya se ha enrutado ), se ignora este argumento. De lo contrario, Microsoft Excel enruta el libro como se muestra en la siguiente tabla .

Valor Significado True Envía el libro de trabajo al siguiente destinatario. False Does not envía el libro de trabajo. Omitido Muestra un cuadro de diálogo preguntando al usuario si se debe enviar el libro de trabajo .

1

Es bueno utilizar Close() para evitar este mensaje de error, pero lo que si está utilizando la versión v11.0 como el que tiene close() que toma ningún parámetro por lo que el problema sigue sin resolver para este caso. Para resolver este problema, puede usar Marshal.RealeaseCOMObject PERO recuerde que hay algunos issues con eso.

En respuesta a su "cómo sólo decir que no", puede utilizar:

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

espero que ayude!

Cuestiones relacionadas