2010-08-09 14 views
6

Estoy ejecutando macros VBA desde C#, lo que puede generar errores. Estos errores se caracterizan por un mensaje emergente que solicita la eliminación de errores, la interrupción de la aplicación y la intervención del usuario. Necesito estas macros y no se pueden deshabilitar.Ignorar los errores de excel vba durante los valores de las celdas de lectura desde C# hasta la interoperabilidad COM

¿Cómo puedo ignorar estos errores o cerrar los diálogos automáticamente?

+0

OP, ¿ha encontrado una solución allí? – Jerome

+1

¿Puede proporcionar una hoja de cálculo de muestra que arroje errores y el código que está utilizando para leer los valores? – Lumigraphics

+0

No creo que eso ayude. Supongamos, por ejemplo, llamar a una simple macro Prueba1, con una sola instrucción, pasando un doble a una función esperando una cadena. Eso arrojaría un error de desajuste de tipo en el tiempo de ejecución, produciendo la ejecución de interrupción emergente antes mencionada. – Jerome

Respuesta

0

Para ocultar el editor visual básico (que muestra cuando se produce un error) antes de intentar abrir el archivo, cambie Excel.VBE.MainWindow.Visible por falso. Tenga en cuenta que si no se muestra el depurador, deberá capturar una excepción en su código, por lo tanto, envuelva su código con una captura de prueba.

Si no se necesitan macros y se pueden ignorar, use msoAutomationFieldDisable para deshabilitarlos por completo.

using InteropExcel = Microsoft.Office.Interop.Excel; 

var Excel = new InteropExcel.Application(); 

// Excel window will NOT popup if macro errors are found but 
// exceptions might be raised when you execute the broken 
// macro. 
Excel.VBE.MainWindow.Visible = false; 

// Uncomment to disable macros completely. 
// Excel.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable; 

// I used this snippet to open a file with a broken macro. 
var MyWorkbook = Excel.Workbooks.Open (@"YourFilePath"); 
var FirstWorksheet = (InteropExcel.Worksheet)MyWorkbook.Worksheets ["Plan1"]; 
var MyCell = ((InteropExcel.Range)FirstWorksheet.Cells [1,1]); 
var CellValue = (Int32)MyCell.Value; 
+1

Me temo que las macros no se pueden ignorar aquí. – Jerome

+0

Actualicé mi respuesta con la solución para ocultar errores de macro. –

+0

Excel.VBE.MainWindow.Visible = false; no tiene ningún efecto Tengo miedo – Jerome

1

Ör de la forma más sencilla. Incluya on error resume next en sus macros, para que el macro no se detenga en los errores.

+0

De hecho :), pero fuera del alcance de esta pregunta. – Jerome

Cuestiones relacionadas