2017-07-14 1 views
0

Ich versuche, die Namen aller derzeit geöffneten Arbeitsmappen zu erhalten. Ich habe derzeitWie werden alle Arbeitsmappen in Excel in verschiedenen Instanzen angezeigt?

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 

Es ist nicht in der Lage, die andere Arbeitsmappe abzuholen, die in der Schleife geöffnet ist. Es wird nur einmal durchlaufen, was das Vergleichen der aktuellen Arbeitsmappe mit sich selbst ist, was nichts bewirkt. Dies liegt wahrscheinlich daran, dass ich Code hatte, der Daten von einer Software abruft, herunterlädt und diese Excel-Datei öffnet. Ich vermute, dass diese Datei eine andere Instanz von Excel ist, wenn sie heruntergeladen und geöffnet wird, da ich sie deutlich auf meinem Bildschirm sehe.

+0

verwirren Sie Arbeitsblatt mit Arbeitsmappe? – jsotola

+1

Verschiedene Instanzen sprechen nicht miteinander, zumindest nicht auf dem "normalen" Weg (jedenfalls nicht für Normalsterbliche zugänglich). "Anwendung" bezieht sich auf die Instanz, auf der der Code gerade ausgeführt wird. Die beiden Instanzen müssen Prozessgrenzen durchlaufen, um miteinander "zu reden". Keine kleine Aufgabe, die du hier stellst. Oder wird die heruntergeladene Arbeitsmappe einfach im "geschützten Modus" in derselben Instanz geöffnet? –

+0

Welche Version von Excel? –

Antwort

0

Verschiedene Instanzen von Excel können nicht miteinander kommunizieren, aber mehrere Arbeitsmappen, die in derselben Instanz geöffnet sind, können problemlos miteinander kommunizieren.

Wenn Sie mehrere Excel-Dateien auswählen und die Eingabetaste drücken, werden alle in derselben Instanz ausgeführt. Wenn dies Ihr Szenario beschreibt, können Sie alle Arbeitsmappen und alle Arbeitsblätter einfach auflisten, indem Sie den folgenden Code ausführen.

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 
Verwandte Themen