2012-06-26 3 views
1

Я пытаюсь обновить файл Excel из Outlook (Office 2010). Как мне обратиться и получить доступ к Excel?Ссылка и доступ к Excel из Outlook

Как простой тест, я пытаюсь подсчитать количество открытых книг. Когда я запускаю это, я получаю 0, хотя есть 2 открытых.

Sub Test() 
    Dim xlApp As Excel.Application 
    Dim xlWBook As Excel.Workbook 

    Set xlApp = New Excel.Application 
    Debug.Print "xlApp.Workbooks.Count = " & xlApp.Workbooks.Count 

    On Error Resume Next 
    Set xlWBook = xlApp.Workbooks("Data.xlsx") 
    Err.Clear 'Clear error and open File Index 

    If xlWBook Is Nothing Then 
     Set xlWBook = xlApp.Workbooks.Open("C:\Users\Chris\Desktop\Data.xlsx") 
    End If 
End Sub 
+0

Создается новый экземпляр Excel, который является отдельным для одного или нескольких экземпляров (содержащих две открытые книги) – brettdj

+1

Звучит как беспорядочный способ работы. Лучше открыть книги, которые вам нужны в (новом) экземпляре Excel, который принадлежит вашему коду. –

ответ

4

Это то, что я использую для обнаружения Excel:

Dim xlApp As excel.Application 
On Error Resume Next 
Set xlApp = GetObject(, "Excel.Application") 
If Err.Number = 429 Then 'Excel not running 
    Set xlApp = CreateObject("Excel.Application") 
End If 
On Error GoTo 0 

раз xlApp установлен, вы можете использовать xlApp.Workbooks.Count для подсчета листов

Примечание: Этот код будет получить первый открытый , если существует более одного экземпляра Excel для поиска

Если вам нужно найти конкретную книгу, от this page, Set xlApp = GetObject("Book2").Application, найти книгу, даже если она не в первом случае. Если рабочая книга из файла, или уже сохранена, заменить book2 с полным пути и именем файла - Побочного действия - это будет также открытых файл, если он еще не открыт Подробнее Использования: http://msdn.microsoft.com/en-us/library/aa164798%28v=office.10%29.aspx

+1

Это не сработает, если есть более одного существующего экземпляра Excel open – brettdj

+0

Правда, но я использую этот код, пытаясь не открывать больше экземпляров, чем мне нужно – SeanC

+0

Удивительно, спасибо большое. Я никогда не использовал GetObject и SetObject, но теперь они добавлены в мой репертуар. Еще раз спасибо. –

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