Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Variable aus anderer Datei holen

Variable aus anderer Datei holen
12.12.2022 09:16:21
Tomek
Moin zusammen,
ich habe eine Excel-Datei mit etwas VBA-Code, aus dem heraus eine weitere Datei geöffnet wird. Es werden Variablen an ein dortiges Makro übergeben. Nachdem dieses Makro sein Hexenwerk getan hat, würde ich nun gerne ein paar neue Variablen zurück an das Makro der ersten Datei übergeben. Das gleiche Prinzip wie bei der Übergabe Sheet1 zu Sheet2 kann ich nicht gehen, da Sheet2 später von verschiedenen Dateien angesprochen werden soll. Hier ein wenig aufs wesentliche reduzierter Beispielcode:

Sub Sub1_Sheet1()
Workbooks.open Filename:="Sheet2"
Application.run "Sheet2!Sub1_Sheet2", Var1
End Sub

Sub Sub1_Sheet2(var1)
var2=irgendeinHokuspokus(var1)
End Sub
Bis hierhin funktioniert alles. Jetzt muss nur noch die Var2 zurück ins Sheet1. Hätte Irgendwer vielleicht einen Tipp für mich?
Vielen Dank im Voraus.
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 09:34:39
peterk
Hallo

Sub Sub1_Sheet1()
Workbooks.open Filename:="Sheet2"
Application.run "Sheet2!Sub1_Sheet2", Var1, Var2
End Sub
Sub Sub1_Sheet2(var1, ByRef var2)
var2=irgendeinHokuspokus(var1)
End Sub
Peter
AW: Variable aus anderer Datei holen
12.12.2022 10:22:46
Tomek
Vielen Dank für die sehr schnelle Antwort. Leider funktioniert das bei mir nicht. In Sheet2 haben alle Variablen noch die richtigen Werte. Sobald das Makro wieder in Sheet1 zurück springt, haben die Übergabevariablen ihre Startwerte, sprich 0 oder leer. Hier die ungekürzten Übergabezeilen:

Application.Run "'FlacherzeugnisEN10028-2009_TEST.xlsm'!Start_aus_Berechnung", Ws, tAusl, K, K20, Typ

Sub Start_aus_Berechnung(Ws, tAusl, ByRef K, ByRef K20, ByRef Typ)

Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 12:14:11
peterk
Hallo
Folgender Code funktioniert bei mir:

Sub test1()
Dim var1 As Long
Dim var2 As Long
Dim var3 As Long
Dim oapp As Object
Set oapp = Application
oapp.Run "Test2!Test2", 2, var1, var2, var3
Debug.Print var1, var2, var3
End Sub

Sub test2(inp, ByRef outp1 As Variant, ByRef outp2 As Variant, ByRef outp3 As Variant)
outp1 = inp * 5
outp2 = inp * 6
outp3 = inp * 7
End Sub
Peter
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 20:10:48
Daniel
Ok, das funktioniert
bei mir mit meinens Tests hats nicht funktioniert.
Kannst du mir erklären, was du spezielles macht, damit es funktioniert und und warum es das tut?
Gruß Daniel
AW: Variable aus anderer Datei holen
13.12.2022 09:07:32
peterk
Hallo Daniel
Ich kann Dir Deine Frage leider nicht beantworten.
Set oapp = Application
oapp.Run "Test2.xlsm!Test2", 2, var1, var2, var3
funktioniert, aber
Application.Run "Test2.xlsm!Test2", 2, var1, var2, var3
funktioniert nicht. Also liegt es an der Zuweisung Set oapp = Application.
Hab diesen Idee von folgender Seite übernommen:
https://bettersolutions.com/vba/macros/application-run.htm
Peter
Anzeige
Danke für die Info
13.12.2022 09:45:30
Daniel
Normalerweise geht man ja davon aus, dass so eine Variablenzuweisung keine weiteren Auswirkungen hat.
Aber gut zu wissen.
Danke nochmal.
Gruß Daniel
AW: Variable aus anderer Datei holen
13.12.2022 15:57:28
Tomek
Sorry, dass es mit der Rückmeldung etwas gedauert hat. Ich bin nicht auf Anhieb durch Dein Beispiel durchgestiegen und musste es dann natürlich noch auf meinen Anwendungsfall anpassen. Aber jetzt läuft es.
Ein ganz dickes Dankeschön dafür!
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 10:34:17
onur

Sub Sub1_Sheet1()
Workbooks.open Filename:="Sheet2"
Application.run "Sheet2!Sub1_Sheet2", Var1
End Sub
Sub Sub1_Sheet2(var1)
var1=irgendeinHokuspokus(var1) 'var1 wird verändert
End Sub

AW: Variable aus anderer Datei holen
12.12.2022 10:46:49
Tomek
Das geht in meinem Fall leider nicht, da Var1 und Var2 unterschiedlich sind. Anhand von Var1 (in meinem konkreten Fall sind es mehrere Variablen) werden mehrere Vorentscheidungen getroffen und anschließend ein paar andere Werte (Var2) aus umfangreicheren Tabellen interpoliert. Da möchte ich nicht die Eingabewerte überschreiben, sonst steigt da keiner mehr durch. Trotzdem Danke für die Anregung.
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 10:44:15
Daniel
Hi
Wenn, dann als Funktion mit Rückgabewert.
Eine Variablenübergabe byRef funktioniert zwischen zwei Mappen nicht.
Auf die Schnelle ohne zu testen würde ich vermuten so:

   Sub Sub1_Sheet1()
Workbooks.open Filename:="Sheet2"
X = Application.run ("Sheet2!Sub1_Sheet2", Var1)
End Sub
Function Sub1_Sheet2(var1)
Sub1_Sheet2=irgendeinHokuspokus(var1)
End Sub
Gruß Daniel
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 11:22:55
Tomek
Mit functions bin ich noch nicht so per Du. Ich muss mir diesen Lösungsansatz genauer anschauen, um ihn auf meine Bedürfnisse anzupassen. Wird etwas dauern, bis ich eine Rückmeldung geben kann. Danke schon mal.
AW: Variable aus anderer Datei holen
12.12.2022 13:17:54
Daniel
In VBA sind Subs und Function eigentlich das gleiche.
Functions haben zusätzlich einen Rückgabewert.
Für den Datenaustausch zwischen Dateien müsstest du diesen Rückgabewert verwenden, da das Application.Run die Werte immer nur byVal übergibt und nicht byRef
dh eine Änderung der Variablen in der aufrufenden Mappe ist nicht möglich.
Gruß Daniel
Anzeige
AW: Variable aus anderer Datei holen
12.12.2022 14:06:24
peterk
Hallo Daniel
siehe mein Beispiel
Peter
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Variablen aus einer anderen Excel-Datei holen


Schritt-für-Schritt-Anleitung

Hier ist eine einfache Anleitung, wie Du Variablen aus einer anderen Excel-Datei holen kannst, indem Du VBA verwendest:

  1. Öffne die Zielarbeitsmappe: Verwende Workbooks.Open, um die andere Datei zu öffnen.

    Workbooks.Open Filename:="Pfad\zu\deiner\Datei.xlsx"
  2. Führe das Makro in der anderen Datei aus: Nutze Application.Run, um ein Makro in der anderen Datei aufzurufen. Du kannst Variablen übergeben, indem Du sie als Parameter angibst.

    Application.Run "'Dateiname.xlsx'!Makroname", Var1, Var2
  3. Rückgabe der Variablen: Wenn Du Werte zurückbekommen möchtest, stelle sicher, dass Du ByRef verwendest, um die Variablen als Referenz zu übergeben.

    Sub Makroname(ByRef var1 As Variant, ByRef var2 As Variant)
       ' Code zur Bearbeitung
    End Sub
  4. Schließe die Arbeitsmappe: Vergiss nicht, die Arbeitsmappe zu schließen, wenn Du fertig bist.

    Workbooks("Dateiname.xlsx").Close SaveChanges:=False

Häufige Fehler und Lösungen

  • Variablen haben nach Rückkehr den Wert 0 oder leer: Stelle sicher, dass Du ByRef für die Übergabe von Variablen verwendest. Wenn Du ByVal verwendest, wird eine Kopie der Variablen übergeben, und Änderungen werden nicht zurückgegeben.

  • Fehler bei Application.Run: Prüfe, ob der Name des Makros korrekt ist und ob die Datei, die Du aufrufst, tatsächlich geöffnet ist.


Alternative Methoden

Eine andere Möglichkeit, um Daten aus einer anderen Datei zu holen, besteht darin, Funktionen anstelle von Subs zu verwenden. Eine Funktion kann einen Rückgabewert liefern, was bedeutet, dass Du den Wert direkt in deiner aufrufenden Datei verwenden kannst:

Function FunktionName(ByVal Eingabe As Variant) As Variant
    FunktionName = Eingabe * 2 ' Beispieloperation
End Function

Sub Aufruf()
    Dim Ergebnis As Variant
    Ergebnis = Application.Run("Dateiname.xlsx!FunktionName", Var1)
End Sub

Diese Methode ist besonders nützlich, wenn Du mehrere Werte zurückgeben möchtest, ohne die ursprünglichen Variablen zu verändern.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie Du Daten aus einer anderen Datei holen kannst:

Sub Beispiel()
    Dim var1 As Long
    Dim var2 As Long
    Dim var3 As Long

    ' Öffne die Datei
    Workbooks.Open Filename:="C:\DeinPfad\ZielDatei.xlsm"

    ' Führe das Makro aus und hole die Werte zurück
    Application.Run "'ZielDatei.xlsm'!MakroName", 5, var1, var2, var3

    ' Debug-Ausgabe
    Debug.Print var1, var2, var3

    ' Schließe die Datei
    Workbooks("ZielDatei.xlsm").Close SaveChanges:=False
End Sub

Tipps für Profis

  • Nutze Set für Objekte: Wenn Du mit Objekten arbeitest, vergiss nicht, Set zu verwenden, um sie richtig zuzuweisen.

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next und überprüfe nach kritischen Operationen, ob Fehler aufgetreten sind.

  • Dokumentiere Deinen Code: Füge Kommentare hinzu, um die Funktionsweise Deines Codes zu erläutern, besonders wenn Du mit mehreren Dateien arbeitest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Datei geöffnet ist?
Du kannst den Code so anpassen, dass er zuerst prüft, ob die Datei schon geöffnet ist, bevor Du versuchst, sie erneut zu öffnen.

2. Was ist der Unterschied zwischen ByRef und ByVal?
ByRef übergibt eine Referenz auf die Variable, sodass Änderungen übernommen werden. ByVal übergibt eine Kopie, wodurch die Originalvariable unverändert bleibt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige