2016-07-26 22 views
1

Ich mache ein Makro in excel 2010 und mein Ziel ist, dass jeder dieses Makro für ihre eigene Arbeit verwenden kann. Deshalb muss ich es sehr flexibel machen.Wie kann ich auf eine andere Arbeitsmappe durch den Inhalt einer Zelle in der aktuellen Arbeitsmappe verweisen?

Jeder Name ihre eigene Arbeitsmappe (Ich habe dies durch die Verwendung Thisworkbook im Makro gelöst), aber jeder auch eigener Extraktion von Dateinamen (von wo die neuen Daten kommen).

jedoch fast niemand weiß, wie man mit VBA zu arbeiten, so dass es nicht möglich ist, diese Referenz in dem Code jedes Mal einzustellen.

Deshalb Ich habe ein neues Blatt hinzugefügt: ‚Personalisieren‘

In hier kann die Person die Namen der Extraktionsdatei in einer bestimmten Zelle hinzufügen.

Leider Ich weiß nicht, wie Sie eine Arbeitsmappe öffnen, die den Namen einer bestimmten Zelle in der aktuellen Arbeitsmappe hat.

Ich habe versucht, zum Beispiel Windows("ThisWorkbook.Sheets("Personalize").Range("B3")").Activate, aber es hat nicht funktioniert.

Das gleiche mit Blättern, die anders benannt werden können, ich weiß nicht, wie Sie sie im Makro ohne VBA in jedem Fall anpassen.

Hat jemand irgendwelche Ideen oder Anregungen?

Vielen Dank im Voraus!

Mit freundlichen Grüßen,

Hendrik

+0

Versuchen Sie eine Arbeitsmappe oder ein Arbeitsblatt zu öffnen? Ihr Code scheint, dass Sie ein Blatt öffnen möchten, aber Sie sagen immer Arbeitsmappe. – tjb1

+0

Ich versuche, eine Arbeitsmappe zu öffnen, aber der Name dieser Arbeitsmappe ändert sich. Der Benutzer sollte in der Lage sein, den Namen der anderen Arbeitsmappe in einer bestimmten Zelle der aktuellen Arbeitsmappe zu schreiben. So sollte das Makro denken "Ich muss die Arbeitsmappe mit demselben Dateinamen wie dem Text in beispielsweise Zelle A3 dieser Arbeitsmappe öffnen". Ich weiß nicht, ob ich mit dieser Erklärung klarer bin? ... – Hendrik

Antwort

0

Wenn Sie eine Arbeitsmappe öffnen, die Sie benötigen den vollständigen Pfad geschlossen ist:

dim wkb as workbook 
dim wbPath as String 

wbPath = ThisWorkbook.Sheets("Personalize").Range("B3").value 
Set wkb = Workbooks.Open(wbPath) 

Wenn Sie eine Arbeitsmappe aktivieren möchten, die bereits geöffnet ist, können Sie Sie benötigen nicht den vollständigen Pfad, sondern den Namen der Arbeitsmappe (z. B. "Workbook1.xlsx"). Dazu können Sie den Pfad abschneiden, bevor Sie "Workbook1.xlsx" erreichen (alternativ, wenn die Arbeitsmappe immer zuerst geöffnet wird, lassen Sie sie den Namen der Arbeitsmappe direkt eingeben und überspringen Sie den Rest des Pfads):

dim wbname as String 

wbname = ThisWorkbook.Sheets("Personalize").Range("B3").value 
Do until Instr(wbname, "\") = 0 
    wbname = Mid(wbname, instr(wbname, "\") + 1) 'I didn't test this, just going off the top of my head 
Loop 

Workbooks(wbName).Activate 

Achten Sie darauf, Ihre Fehler richtig zu behandeln. Als Referenz: VBA Excel simple Error Handling

-Test, was, wenn Sie einen Namen versuchen, die Eingabe geschieht, die zum Beispiel falsch ist. Sie möchten diese Fehler mit entsprechenden Meldungsfeldern behandeln, oder die Benutzer haben das Gefühl, dass Ihr Programm nicht funktioniert.

+0

Der Wert in B3 müsste den vollständigen Pfad der Datei enthalten, richtig? – tjb1

+0

Im ersten Fall ja. Da die Arbeitsmappe geschlossen ist, muss der Code finden, wo es gespeichert wird. im zweiten Fall, nein, es ist wirklich der Name des Arbeitsbuchs.Sie können also den Pfad setzen und eine String-Manipulation verwenden, um alles vor 'name.xlsm' abzuschirmen. Ich kann das zu meiner Antwort hinzufügen. –

+0

"Hier kann die Person den Namen der Extraktionsdatei in einer bestimmten Zelle hinzufügen." - Ich habe das nur erwähnt, weil die Erwähnung von Name und kein Pfad in der Frage nicht sicher ist, ob Hendrik weiß, dass das erforderlich ist. – tjb1