2014-10-28 3 views
0

Хорошо, мне, должно быть, здесь что-то не хватает.Использование Access 2010 VBA список всех открытых книг Excel

В Excel 2010 это VBA работает:

Private Sub ExcelTest() 

Dim wb As Workbook 

For Each wb In Workbooks 

    Debug.Print wb.Name 

Next wb 

End Sub 

Я пытаюсь повторить это в Access VBA, и я попытался следующие подходы в Access 2010 без успеха.

Private Sub AccessTest1() 
'Derived from http://stackoverflow.com/questions/15958061/controlling-excel- 
'workbook-from-access-2010-vba 

Dim xlApp As Excel.Application 
Dim xlWB As Excel.Workbook 

Set xlApp = New Excel.Application 

For Each xlWB In Excel.Workbooks 
    Debug.Print xlWB.Name 
Next xlWB 

'Nothing happens. 
'Stepping through and hovering: 
'xlApp = "MicroSoft Excel" 
'xlWB = Nothing 
'xlWB.Name = Object variable or With block variable not set. 
'But doesn't throw an error. 

End Sub 

Private Sub AccessTest2() 
'Derived from http://stackoverflow.com/questions/5729195/how-to-refer-to-excel- 
'objects-in-access-vba 

Dim xlApp As Excel.Application 

Dim wb As Excel.Workbook 

Set xlApp = New Excel.Application 

For Each wb In Excel.Workbooks '<--- Like this nothing happens 
    Debug.Print wb.Name 
Next wb 

'Stepping through and hovering: 
'xlApp = "MicroSoft Excel" 
'wb = Nothing 
'wb.Name = Object variable or With block variable not set. But doesn't throw an error. 

For Each wb In xlApp.Workbooks '<--- This throws a "Object variable or 
           'With block variable not set" error 
    Debug.Print wb.Name 
Next wb 

End Sub 

Private Sub AccessTest3() 
'Derived from http://stackoverflow.com/questions/5729195/how-to-refer-to-excel- 
'objects-in-access-vba 

Dim objExcelApp As Object 
Dim wb As Object 

Set objExcelApp = CreateObject("Excel.Application") 

Set wb = objExcelApp.Workbook '<--- Throws "Object doesn't support this property 
           'or method error" 
'Hovering after error: 
'objExcelApp = "MicroSoft Excel" 
'wb = Nothing 

For Each wb In objExcelApp.Workbooks 
    Debug.Print wb.Name 
Next wb 

End Sub 

У меня определенно установлена ​​ссылка «Библиотека Microsoft Excel 14.0» в Access. Я просто пытаюсь перечислить все открытые книги Excel, чтобы затем я мог действовать против этой информации. Спасибо за вашу помощь заранее.

ответ

0

Установить xlApp = Новый Excel.Application создает новый экземпляр Excel - и, конечно, у вас нет книг.

То, что вы хотите достичь, - пройти через уже открывшийся экземпляр Excel. Поэтому вы должны использовать getObject().

Другая ошибка в вашем заявлении For ... вам нужно использовать xlApp.Workbooks, а не Excel.Workbooks.

Следующий код должен обеспечить exprected результат:

Dim xlApp As Excel.Application 
Set xlApp = GetObject(, "Excel.Application") 

Dim xlWB As Excel.Workbook 
For Each xlWB In xlApp.Workbooks 
    Debug.Print xlWB.Name 
Next xlWB 

Set xlApp = Nothing 
Set xlWB = Nothing 

Пожалуйста, имейте также в виду Дестри объектные переменные на конце, установив их в настоящее время.

+0

Спасибо, что работает. У меня было подозрение, что я должен был быть «в» книге, но я не мог придумать, как добиться этого, не выбирая книгу. Я не добрался до уборки, так как я не мог получить основную часть работы. Еще раз спасибо за ответ и объяснение. – EStraka

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