Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1788to1792
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable Projektübergreifend nutzen

Variable Projektübergreifend nutzen
21.10.2020 10:38:28
Edmund
Hallo Ihr
Ich habe da mal wieder eine interessante Aufagbe.
Von einer Quelldatei sollen Zellen in eine Zieldatei kopiert werden.
Leider ist der Name der Quelldatei nicht bekannt.
Bisher helfe ich mir so, dass ich den Nutzern sage, sie sollen alle Arbeitsmappen schließen, dann erst die Quelldatei und anschließend die Zieldatei öffnen. Mit dem Makro der Zieldatei spreche ich die Quelle dann per workbooks(1) an.
Das ist natürlich etwas holprig.
Viel besser wäre:
Beim öffnen der Quelldatei wird der Dateiname automatisch in eine Variable gelesen, auf die ich dann im Makro der Zieldatei zugreifen kann.
Die Frage ist: Wie muss die Variable deklariert werden, damit das funktioniert?
Hab es mit Public strDateiname As String versucht, aber das funzt nicht.
Gibt es da überhaupt eine Lösung?
Danke schon mal für Eure Antworten

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 11:23:47
ChrisL
Hi
Wenn du die Quelldatei aus der Zieldatei heraus öffnen würdest (z.B. FileOpen Dialog), dann wäre die Quelldatei nachher bekannt. In eine Situation wie von dir beschrieben, bin ich bisher noch nie gekommen, aber theoretisch kannst du die Variable an die andere Mappe übergeben.
Beispiel Zieldatei:
Public x As String
Sub UebergebeVariable(strInput As String)
x = strInput
End Sub
Sub t()
MsgBox x
End Sub

Beispiel Quelldatei:
Sub Uebergabe()
Application.Run "Zieldatei.xlsm!UebergebeVariable", ThisWorkbook.Name
End Sub

cu
Chris
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 11:29:21
Rudi
Hallo,
warum öffnest du die Quelldatei nicht per Makro aus der Zieldatei heraus?
Schema:
Sub aaaa()
Dim strQ As String, wkbQ As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Quelle öffnen"
If .Show = -1 Then strQ = .SelectedItems(1)
End With
If Len(strQ) Then
Set wkbQ = Workbooks.Open(strQ)
Else
Exit Sub
End If
'dein Code
End Sub

Gruß
Rudi
AW: Variable Projektübergreifend nutzen
21.10.2020 11:45:47
Edmund
Danke für Eure Antworten.
Es ist so:
Die Quelldatei ist im Normalfall immer geöffnet, da mit dieser gearbeitet wird. Alle 24 Wochen bekommt sie einen neuen Namen, weshalb ich gesagt habe, name unbekannt.
Einmal im Monat sollen aus dieser Datei einige Daten zum weiteren Bearbeiten kopiert werden.
Stimmt natürlich, ich kann die Quelle auch per Makro öffnen. Da sie aber im Normalfall eh offen ist, müsste sie dann davor aber, wie jetzt auch, erstmal gespeichert und geschlossen werden.
Damit ist zur bisherigen Methode kein wirklicher Gewinn da.
Auch den Namen aktiv übergeben geht zwar so vermutlich, aber am liebsten wäre mir halt einfach eine Variable, die von beiden Dateien genutzt werden kann
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 12:00:28
Sigi.21
Hallo,
zuerst sagst du, "Leider ist der Name der Quelldatei nicht bekannt" und jetzt sagst du "Die Quelldatei ist im Normalfall immer geöffnet".
Wenn sie offen ist dann kennst du sie doch! Nimm sie einfach in eine Objektvariable.
Dim Quelle as Workook
Set Quelle = Active.Workbook
...
Sigi
AW: Variable Projektübergreifend nutzen
21.10.2020 12:10:43
Edmund
Hallo Sigi
Sorry, dann habe ich mich etwas unglücklich ausgedrückt.
Ich meinte damit natürlich, dass ich in meinem Makro die Datei nicht mit Namen ansprechen kann, weil der sich alle paar Wochen ändert.
Dann schau ich mal, ob ich ds mit der Objektvariablen hinbekomme
Kann ich die dann von meinem Ziel aus nutzen?
Sorry, meine vba Kenntnisse sind halt wirklich nur rudimentär
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 12:20:58
Sigi.21
Hallo,
es kommt auch darauf an, in welcher Mappe dein Code steckt. In meinem simplen Bsp. muss die Quelldatei aktiv sein, ansonsten brauchst du doch den Namen: Set Quelle = Workbooks("Name.xlsx")
Bei Quelle und Ziel solltest du beide in eine Objektvariable stecken, dann kannst du sie entsprechend anteuern.
Sigi
AW: Variable Projektübergreifend nutzen
21.10.2020 12:42:02
Edmund
Hallo Sigi
Danke für Deine Mühe
Aktiv ist die Zieldatei.
In der befindet sich das Makro für den Datentransfer.
Set Quelle = Workbooks("Name.xlsx") kann ich also nicht nutzen, weil sich der Name ja alle paar Wochen ändert.
Ich denke ich belasse es beim bisherigen "erst Quelle dann Ziel öffnen und alles andere schließen", weil dann weiß ich, dass meine Quelle Workbooks(1) heißt.
Ich denke, einmal im Monat kann man das dem Kollegen zumuten :)
Ich hatte halt gehofft, dass ich beim öffnen der Quelle unter Private Sub workbook_open() gleich einer Variablen den Namen zuteilen und später mit dem Makro der Zieldatei auslesen kann.
Viele Grüße
Edmund
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 13:18:10
Sigi.21
Hallo Edmund,
dann lass die Quelldatei vom User öffnen, und dabei setzt du die Objektvariable QM (f. Quelle) (s. Bsp.)
Sigi
https://www.herber.de/bbs/user/141002.xlsm
AW: Variable Projektübergreifend nutzen
21.10.2020 12:41:28
ChrisL
Hi Edmund
Nebst dem bereits aufgezeigten Weg (es kann natürlich anstelle des Strings auch das Objekt übergeben werden), könnte man ggf. noch das "Muster" des Dateinamens zur Identifikation der richtigen Datei verwenden z.B. fixerTEXT_variablesDatum.xlsm
Für einen konkreten Vorschlag müsste man das "Muster" der Dateibezeichnung kennen.
cu
Chris
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 12:56:31
Edmund
Hallo Chris
Danke für Deine Antwort
oweh, das Muster wäre:
Jahr-lfdNr Kalenderwoche-Kalenderwoche.xlsm
wobei die differenz der KW immer 24 ist.
Wenn dann aber noch ein Jahreswechsel dabei ist, wird der Dateiname erst richtig abenteuerlich.
Das können wir glaub ich vergessen.
Und das mit dem Übergeben gestaltet sich von daher auch schwierig, weil der Name der Zieldatei auch jeden Monat ein anderer ist. Und zuletzt, wenn ich das richtig verstanden habe, müsste man die Übergabe des Namens von der Quelldatei aus starten. Ich denke, das wird für den User komplizierter, als wenn er dann halt einmal im Monat für den Transfer alle anderen Mappen schließen muss, damit ich die Quelle mit Workbooks(1) ansprechen kann.
Wenn es, so wie es sich für mich jetzt darstellt, keine Möglichkeit gibt, eine Variable zu deklarieren, die Projektübergreifend nutzbar ist, werde ich wohl an der bisherigen Lösung festhalten.
Viele Grüße
Edmund
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 13:16:19
peterk
Hallo
Du könntest eine Systemvariable definieren z.B. (In Quelle)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim objUserEnvVars As Object
Set objUserEnvVars = CreateObject("WScript.Shell").Environment("User")
objUserEnvVars.Item("ItsMe") = ""
Set objUserEnvVars = Nothing
End Sub
Private Sub Workbook_Open()
Dim objUserEnvVars As Object
Set objUserEnvVars = CreateObject("WScript.Shell").Environment("User")
objUserEnvVars.Item("ItsMe") = ThisWorkbook.Name
Set objUserEnvVars = Nothing
End Sub
Definiert die Sytemvariable "ItsMe" beim Öffnen und löscht sie wieder beim schliesen.
In Ziel kannst Du nun die Variable abfragen (wenn nicht vorhanden, dann ist die Quelle nicht offen)

Sub CheckQuelle()
Dim objUserEnvVars As Object
Dim strEnvVar As String
Set objUserEnvVars = CreateObject("WScript.Shell").Environment("User")
strEnvVar = objUserEnvVars.Item("ItsMe")
If strEnvVar = "" Then
MsgBox "Quelle ist nicht offen"
Else
MsgBox "Benutze Quelle: " & strEnvVar
End If
Set objUserEnvVars = Nothing
End Sub

Peter
Anzeige
AW: Variable Projektübergreifend nutzen
21.10.2020 14:09:11
Edmund
Hallo peterk
Goil das!
Genau so etwas habe ich gesucht.
Ich weiß zwar (noch) nicht genau, was dein Script im Detail macht, aber es funktioniert.
Damit kann ich etwas anfangen.
Vielen Dank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige