2017-07-14 34 views
0

我想獲取當前打開的所有工作簿的名稱。我目前有如何在不同的實例中顯示excel中的所有工作簿?

Dim wb1 As Workbook 
    Set wb1 = ThisWorkbook 'wb where macro is 
    wb1_name = wb1.Name 
    For Each WB In Application.Workbooks 
    wb2_name = WB.Name 
     If wb2_name <> wb1_name Then 
     WB.Activate 
     Range("H1").Value = "hello" 

     End If 
    Next WB 

    End Sub 

它無法拾取循環中打開的其他工作簿。它只循環一次,這是將當前工作簿與自己進行比較,從而無所作爲。這可能是因爲我有一些代碼從軟件中檢索數據,下載並打開該excel文件。我懷疑這個文件是Excel下載並打開的另一個實例,因爲我在屏幕上清楚地看到它。

+0

你難以理解工作表與工作簿? – jsotola

+1

不同的實例不會彼此交談,至少不是「正常」的方式(不管怎樣,凡是凡人都可以訪問的方式)。 'Application'指的是當前正在運行你的代碼的實例。這兩個實例有過程邊界交叉以便相互「交談」。你在這裏問的不是一件小事。或者,下載的工作簿只是在「保護模式」下以相同的實例打開? –

+0

什麼版本的Excel? –

回答

0

Excel的不同實例無法相互通信,但在同一實例中打開的多個工作簿可以輕鬆地相互「通話」。

如果您選擇多個Excel文件並按Enter鍵,它們都在同一個實例中運行。如果這描述了您的方案,則可以通過運行下面的代碼輕鬆列出所有工作簿以及所有工作表。

Sub ListWorkbooks() 
    Dim Rng As Range 
    Dim WorkRng As Range 
    On Error Resume Next 

    Set WorkRng = Application.Selection 
    Set WorkRng = Application.InputBox("Out put to (single cell)", xTitleId, WorkRng.Address, Type:=8) 
    Set WorkRng = WorkRng.Range("A1") 
    xNum1 = Application.Workbooks.Count 
    For i = 1 To xNum1 
     xNum2 = Application.Workbooks(i).Sheets.Count 
     WorkRng.Offset(i - 1, 0).Value = Application.Workbooks(i).Name 
     For j = 1 To xNum2 
      WorkRng.Offset(i - 1, j).Value = Application.Workbooks(i).Sheets(j).Name 
     Next 
    Next 
End Sub 
相關問題