2013-09-10 6 views
0

Я написал следующую процедуру, чтобы проверить приложение Microsoft Excel, если оно открыто. Процедура работает нормально, за исключением того, что после открытия рабочей книги и активации листа открывается второй экземпляр Excel.Процедура открывает несколько экземпляров Excel

Вот мой код:

Dim xlApp As New Excel.Application 
Dim xlBook As Excel.Workbook 
Dim xlWBName As String = "2011.1004.Compensation Template" 

For Each p As System.Diagnostics.Process In System.Diagnostics.Process.GetProcesses() 
    If p.ProcessName <> "EXCEL" Then 
     xlApp.Visible = True 
     xlBook = xlApp.Workbooks.Open("F:\Test Environment\Compensation Workbook\Compensation Workbook\bin\Debug\" & xlWBName & ".xlsx") 
     Dim xlSheet As Excel.Worksheet 
     xlSheet = CType(xlBook.Sheets("SummaryWorksheet"), Worksheet) 

     xlSheet.Activate() 
    End If 
Next 
+0

Вы можете использовать отладчик, чтобы определить, какая строка вызывает второй экземпляр для открытия? – Jack

ответ

3

Используйте метод GetObject найти уже открытый объект Application:

http://msdn.microsoft.com/en-us/library/e9waz863(v=vs.90).aspx

Dim xlApp As Excel.Application 

    Try 
     'get an existing excel.application object 
     xlApp = GetObject(, "Excel.Application") 
    Catch ex As Exception 
     'no existing excel.application object - create a new one 
     xlApp = New Excel.Application 
    End Try 

    Dim xlBook As Excel.Workbook 
    Dim xlWBName As String = "2011.1004.Compensation Template" 


    xlApp.Visible = True 
    xlBook = xlApp.Workbooks.Open("F:\Test Environment\Compensation Workbook\Compensation Workbook\bin\Debug\" & xlWBName & ".xlsx") 
    Dim xlSheet As Excel.Worksheet 
    xlSheet = CType(xlBook.Sheets("SummaryWorksheet"), Worksheet) 

    xlSheet.Activate() 
+0

Было бы лучше поймать точное исключение, а не предполагать, что любое исключение означает, что объект приложения не существует? –

+0

Метод 'GetObject' имеет два исключения: один из типов' System.IO.FileNotFoundException' и один из типов 'System.Exception'. 'FileNotFoundException' возникает, когда вы указываете' appname' для параметра 1 GetObject. В этом случае GetObject не передает параметр 'appname', и если' GetObject' терпит неудачу, возвращается исключение типа 'System.Exception'. –

+0

Ах, правильно. Я думал больше о том, что такое класс «Файл». –

Смежные вопросы