2016-03-23 12 views
1

Ich brauche ein Makro in einer Arbeitsmappe zu schreiben, aber in diesem marco muss ich es sagen zu einer anderen Arbeitsmappe gehen einige Daten zu kopieren und in der Arbeitsmappe einfügen, die das Makro in hat, jetzt habe ich ein Problem, die andere der Referenzierung Arbeitsmappe, weil der Name dieser Arbeitsmappe immer unterschiedlich ist, aber das Blatt, von dem ich kopiere, hat immer denselben Namen. Gibt es eine einfache Möglichkeit, Macro zu bitten, immer die Daten aus dem richtigen Openbook zu holen, ohne den Namen der Arbeitsmappe zu verwenden?Wie referenziere ich eine Arbeitsmappe, die den Namen der Arbeitsmappe nicht verwendet?

Vielen Dank

+0

Wenn Sie nicht wissen, was es heißt, nicht wissen, was seine Ordnungs in der Sammlung ist, nie eine Arbeitsmappe Objektvariable gesetzt, wenn Sie es geöffnet und kann nicht durch Looping durch alle Arbeitsmappen identifizieren für eine einzigartige Eigenschaft suchen dann werden Sie niemals zuverlässig wissen, wo sich das zweite Arbeitsbuch befindet. – Jeeped

+1

Wollen Sie sagen, dass die Arbeitsmappe, auf die Sie verweisen müssen, ohne einen Namen zu verwenden, diejenige ist, die das Makro enthält? Wenn ja, können Sie 'Thisworkbook' – Jordan

+1

Sie sie/auszuwählen fragen konnte die geöffnete Arbeitsmappe zu aktivieren, aber das ist natürlich für benutzer Fehler Raum verlassen hat, die Sie zu stoppen haben würde und die Struktur der Arbeitsmappe zu validieren ist konsistent mit den Erwartungen Ihres Verfahrens, etc .... Der bessere Weg, dies zu tun ist, das Makro * öffnen * die Arbeitsmappe für Sie zu haben, können Sie den 'FileDialog' verwenden, um dem Benutzer zu erlauben, die Arbeitsmappe auszuwählen. –

Antwort

2

Wenn es die nur andere Arbeitsmappe geöffnet ist, dann kann man so etwas wie und wird ziemlich zuverlässig verwenden:

Function GetOtherWorkbook(sheetName$) 
Dim wb as Workbook 
Dim ws as Worksheet 
For Each wb in Workbooks 
    If Not wb = ThisWorkbook Then 
     For Each ws in wb.Worksheets 
      If ws.Name = sheetName Then 
       Set GetOtherWorkbook = wb 
       GoTo EarlyExit 
      End If 
     Next 
    End If 
Next 
MsgBox sheetName & " not found in any open workbook.", vbCritical 
Set GetOtherWorkbook = Nothing 
EarlyExit: 
Exit Function 

Dann diese Funktion nutzen zu otherWB als die zurück Variable für die andere Arbeitsmappe:

Set otherWB = GetOtherWorkbook("some sheet name") 

If otherWB Is Nothing Then 
    Exit Sub 
Else 
    'Do stuff... 
End If 

Sonst Nein, Sie können nicht zuverlässig Referenz eine andere Arbeitsmappe, ohne den Namen zu kennen oder sie den Index in der Workbooks Sammlung.

HINWEIS Wenn andere geöffnete Arbeitsmappen vorhanden sind, gibt diese Methode möglicherweise falsch positive Ergebnisse zurück, wenn mehrere Arbeitsmappen denselben Blattnamen enthalten.

Verwandte Themen