2014-10-28 113 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 

我想在訪問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 

我確定在Access中選中了「Microsoft Excel 14.0 Object Library」引用。 我只是想列出所有打開的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 

也請記住將它們設置爲沒什麼可destry在結束對象變量。

+0

謝謝你的作品。我有一個想法,我不得不在工作簿中「進入」,但我想不到如何在沒有選擇工作簿的情況下實現這一點。由於我無法獲得最基本的工作部分,因此我並沒有到達清理部分。再次感謝答案和解釋。 – EStraka 2014-10-28 14:07:00

相關問題