2010-08-09 17 views
6

Używam makr VBA z C#, które mogą powodować błędy. Błędy te charakteryzują się wyskakującym monitowaniem o debugowanie, przerwaniem aplikacji i wymaganiem wprowadzenia danych przez użytkownika. Potrzebuję tych makr i nie można ich wyłączyć.Ignoruj ​​błędy excel vba podczas odczytu wartości komórki z interakcji C# do COM

Jak mogę automatycznie zignorować te błędy lub zamknąć okna dialogowe?

+0

OP, znalazłeś tam rozwiązanie? – Jerome

+1

Czy możesz podać przykładowy arkusz kalkulacyjny, który generuje błędy i kod, którego używasz do odczytania wartości? – Lumigraphics

+0

Nie sądzę, że to pomoże. Załóżmy, na przykład, wywołanie prostego makra Test1, z pojedynczą instrukcją, przekazywanie podwójnego do funkcji oczekującej ciągu. W ten sposób powstałby błąd niedopasowania typu w czasie wykonywania, powodując wyżej wymienione przerywanie pop-up. – Jerome

Odpowiedz

0

Aby ukryć wizualny edytor podstawowy (który pokazuje, kiedy wystąpi błąd) przed próbą otwarcia pliku, zmień wartość Excel.VBE.MainWindow.Visible na wartość false. Pamiętaj, że jeśli debugger nie zostanie wyświetlony, będziesz musiał złapać wyjątek w swoim kodzie, a więc obróć kod próbnym haczykiem.

Jeśli makra nie są potrzebne i można je zignorować, należy użyć polecenia msoAutomationSecurityForceDisable, aby je całkowicie wyłączyć.

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

Obawiam się, że makra nie mogą być tutaj ignorowane. – Jerome

+0

Zaktualizowałem swoją odpowiedź za pomocą rozwiązania ukrywania błędów makr. –

+0

Excel.VBE.MainWindow.Visible = false; nie ma żadnego efektu Obawiam się, że – Jerome

1

Ör w najprostszy sposób. Dołącz do swoich makr on error resume next, aby makro nie zatrzymywało się na błędach.

+0

Rzeczywiście :) ale poza zakresem tego pytania. – Jerome

Powiązane problemy