2017-07-14 7 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がダウンロードされて開かれたときにExcelの別のインスタンスだと思う。

+0

ワークブックとワークシートを混同していますか? – jsotola

+1

異なるインスタンスは、少なくとも「通常の」方法ではなく(単なる人間にとってはアクセス可能ではない)、お互いには話しません。 'Application'はあなたのコードを現在実行しているインスタンスを指します。 2つのインスタンスは、相互に「話す」ために交差するプロセス境界を持っています。あなたがここで求めている小さな仕事はありません。または、ダウンロードされたワークブックは、同じインスタンス内の「保護モード」で単に開いていますか? –

+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 
関連する問題