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

Teil des Dateipfads als Variable deklarieren

Forumthread: Teil des Dateipfads als Variable deklarieren

Teil des Dateipfads als Variable deklarieren
19.10.2016 15:24:16
Benedikt
Hallo Liebe Forum Member,
ich arbeite gerade an einer Excel Datei, die sich auf weitere Excel Dateien bezieht.
Mein Problem ist, dass sich der Dateipfad jeden Monat um das Datum ändert (im September: 2016-09; im Oktober 2016-10).
Im Moment muss ich all meine Formeln per Suchen-Ersetzen aktualisieren. Das ist allerdings nicht optimal, da ich häufig nicht für alle "aktuellen" Dokumente eine Datei habe, wodurch dann jedes mal ein Fenster aufpoppt, dass ich händisch nach der Datei suche. Dadurch bricht die Suchen / Ersetzen Funktion jedes mal ab.
Viel lieber wäre es mir natürlich, wenn ich das Datum im Dateipfad als Variable deklarieren könnte.
Oder Alternativ, eine Spalte in meiner Excel Tabelle habe, in die sich der Dateipfad rein kopiert, so dass ich diesen dann komplett als Variable deklarieren kann.
Hat von euch jemand eine Idee / Tipp / Hinweis / Alternativvorschlag wie sich das umsetzen lässt?
Meine VBA skills sind wirklich bescheiden, ein Makro aufzeichnen bekomme ich noch hin, aber das war es.
Danke schon mal für eure Hilfe.
Grüße
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teil des Dateipfads als Variable deklarieren
19.10.2016 15:31:35
Martin
Hallo Benedikt,
ich hoffe, dass ich dich richtig verstanden habe und du nach einer UDF (User Defined Function) suchst.
Function MeinDatum() As String
MeinDatum = Year(Date) & "-" & Format(Month(Date), "00")
End Function
Als Zellenformel: "=MeinDatum()"
Viele Grüße
Martin
Anzeige
AW: Teil des Dateipfads als Variable deklarieren
19.10.2016 15:44:08
Benedikt
Hi Martin,
kannst du mir das auf den Kontext bezogen nochmal genauer beschreiben?
\\bla.bla.bla\bla\______\06_PROJECT_L1-L3\_______\02_Project_Team\blabla\_________\Kopie__________\blablalbalblalbalbalba_2015-12.xlsm
Die 2015-12 ist der Teil der sich eben jeden Monat in anpasst. Die Dateien liegen immer im gleichen Ordner und der rest bleibt vollkommen gleich das heißt wenn ich es schaffe diesen Teil des Dateipfads als variable zu deklarieren ist mein Problem glaube ich gelöst.
Wie genau kann ich die =MeinDatum Funktion (UDF) hier einsetzen?
Danke schon mal für die schnelle Antwort
Grüße
Bene
Anzeige
AW: Teil des Dateipfads als Variable deklarieren
19.10.2016 15:57:08
Martin
Hallo Bene,
ich meinte es so:
=INDIREKT("'[blablalbalblalbalbalba_" &MeinDatum()&".xlsm]Tabellenname'!$B$5")
Aber es muss ja kein VBA sein, als Excel-Formel ist es völlig ausreichend.
Viele Grüße
Martin
...und hier noch ohne VBA
19.10.2016 16:03:01
Martin
Hallo Bene,
zuerst dachte ich, dass du unbedingt eine VBA-Lösung wolltest. Die Formel und UDF sieht so aus:
=TEXT(HEUTE();"JJJJ-MM")
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
19.10.2016 16:38:44
Benedikt
Hi Martin,
ich habe mir die Formel, die das heutige Datum in dem Formt nun in eine Zelle (EH2) getippt und verweise dann in der Indirekt Formel folgendermaßen darauf hin:
=INDIREKT("'[blablalbalblalbalbalba_" &EH2&".xlsm"]Tabellenname'!$B$5")
Zu der Formel habe ich noch eine Frage: Welchen nutzen haben die Bereiche in kursiv?
Damit müsste er mir doch dann den Dateipfad ausspucken oder? Bei mir kommt leider #BEZUG
Der Ansatz ist super!
Ich habe mir gerad noch ein paar Videos zum Verständnis angesehen, aber das Problem mit dem Bezug kann ich gerade nicht lösen.
Danke schon mal
Grüße
Bene
Anzeige
AW: ...und hier noch ohne VBA
19.10.2016 16:52:32
Martin
Hallo Benne,
ich habe auch das Gefühl, dass wir irgendwie aneinander vorbeireden.
Zur deiner Frage: Wenn man aus einer anderen Excel-Arbeitsmappe Daten bezieht, dann stehen diese Daten doch in Zellen. In der Formel steht also der Dateiname (in deinem Fall '[blablalbalblalbalbalba_" &EH2&".xlsm"], das betreffende Tabellenblatt (in meinem Beispiel Tabellenname und die Zelle oder der Zellbereich (in meinem Beispiel die Zelle B5. Oder habe ich dich irgendwie falsch verstanden?
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
20.10.2016 10:33:02
Benedikt
Servus Martin,
sorry dass ich erst jetzt zurück schreibe.
Du hast das alles genau richtig verstanden, nur ich habe deine Antwort nicht gecheckt.
Jetzt sind wir auf einem Level.
Ich habe es hinbekommen, dass der Zellinhalt angezeigt wird.
Problem:
INDIREKT Funktion kann nicht auf geschlossene Dateien zugreifen. Doch es handelt sich um so viele Dateien, dass es zu einem Problem führt diese immer alle auf zu machen (das packt der PC gar nicht habe ich festgestellt). Denn dann könnte ich die Daten des Tabellenblattes einfach über "Werte Kopieren" behalten.
Gibt es eine Möglichkeit das ganze ohne Indirekt zu machen? So dass ich feste Bezüge habe?
=dateipfad___variables_datum.xlsm]tabellenblatt_zelle
Oder funktioniert das so nicht?
Danke schon mal
Grüße
Bene
Anzeige
AW: ...und hier noch ohne VBA
20.10.2016 18:19:20
Martin
Hallo Bene,
ich bin eigentlich kein Formel-Experte, mir liegt mehr VBA. Darum kann ich die auch leider nicht sagen, ob es eventuell eine andere Lösung per Excel-Formel gibt.
Vielleicht sollten wir es doch noch einmal mit VBA probieren?! Wie wäre es mit einem Event-Makro, das automatisch bei einem bestimmten Ereignis (z.B. beim Öffnen der Arbeitsmappe) alle Formeln automatisch ersetzt? Falls ich das machen soll, brauche ich ein wenig Zuarbeit:
1. In welchem Arbeitsblatt sollen die Formeln ersetzt werden? (Oder in allen Arbeitsblättern?)
2. Poste hier mal bitte EINE betreffende Formel. Es geht mir darum, dass der alte Dateiname automatisch erkannt wird, denn Excel muss ja wissen was ersetzt werden muss
3. In welcher Zelle steht immer eine Formel (...wo Excel den alten Dateinamen findet)
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
21.10.2016 08:26:05
Benedikt
Hi Martin,
ok gerne. Ich möchte sowieso ein bisschen mehr zum Thema VBA verstehen. Mit dem was ich bisher weiß hab ich noch keinen großen Nutzen gegenüber meiner Formeln. Aber das muss ja nicht so bleiben.
Nur tu ich mir ein wenig schwer hier den gesamten Dateipfad Preis zu geben. Können wir das über E-Mail lösen?
Danke für deine Unterstützung.
Grüße
Bene
Anzeige
AW: ...und hier noch ohne VBA
21.10.2016 12:07:25
Martin
Hallo Benne,
ich habe nicht richtig nachgedacht, eigentlich brauche ich den Pfad nicht. Ich muss doch nur nach dem letzten Backslash vor der Dateiendung "xlsm" innerhalb der Formel suchen und schon habe ich den aktuellen Dateinamen. Aber bitte beantworte noch die Fragen 1 und 3.
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
21.10.2016 13:32:34
Benedikt
Hi Martin,
ok alles klar.
1. Arbeitsblatt: "status_pcl"
3. Zelle: Diese Formel steht in H5. Insgesamt erstrecken sich die Formeln von H5 bis EI 59
Langt das so?
Grüße
Bene
AW: ...und hier noch ohne VBA
21.10.2016 15:37:16
Martin
Hallo Bene,
ich habe noch einige Fehlererkennungen eingebaut und den meisten VBA-Code kommentiert. Wechsle in den VBA-Editor (Alt+F11), klicke doppelt im Projekt-Explorer in deiner Arbeitsmappe auf "DieseArbeitsmappe" und kopiere folgenden Code dort hinein:
Private Sub Workbook_Open()
'Variablen deklarieren
Dim strOldDate As String, strNewDate As String, intPos As Integer
With Worksheets("status_pcl").Cells(5, 8)
If Not .HasFormula Then
'Kontrolle, ob Formel vorhanden
MsgBox "In der Zelle 'H5' ist keine Formel enthalten!", vbExclamation, "Fehler bei  _
Formelanpassung"
Exit Sub
End If
'Kontrolle, ob Verweis auf Excel-Datei vorhanden
intPos = InStr(.Formula, ".xls")
If intPos 
Beim Öffnen der Arbeitsmappe sollten die Formeln jetzt ersetzt werden.
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
21.10.2016 16:07:29
Martin
Hallo Bene,
ich habe mir überlegt, dass du bestimmt jeden Monat die Formeln deiner Datei erneuern möchtest. Hier mal noch eine wesentlich kürzere Variante ohne Fehlerkontrollen, wo einfach prinzipiell vom Datum des Vormonats ausgegangen wird:
Private Sub Workbook_Open()
'Variablen deklarieren
Dim strOldDate As String, strNewDate As String
'Datum vom Vormonat ermitteln
strOldDate = Format(DateSerial(Year(Date), Month(Date), 0), "YYYY-MM")
'Aktuelles Datum ermitteln
strNewDate = Format(DateSerial(Year(Date), Month(Date), 1), "YYYY-MM")
'Automatische Berechnung abschalten
Application.Calculation = xlCalculationManual
'Formeln ersetzen
Worksheets("status_pcl").Cells.Replace What:=strOldDate, Replacement:=strNewDate, LookAt:= _
xlPart
'Automatische Berechnung einschalten
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: ...und hier noch ohne VBA
24.10.2016 14:06:38
Benedikt
Hi Martin,
ich bin begeistert. Beide Makros funktionieren.
Jetzt habe ich noch eine zusätzliche Frage, denn es kommt häufig vor, dass ein Name nicht zurück meldet und somit der Dateipfad mit dem neuen Monat nicht hinterlegt ist. Somit öffnet sich jedes mal ein Fenster, dass ich die Datei händisch suche.
Gibt es eine Möglichkeit diesen "Auto pop-up" zu blockieren?
Denn ich muss jeden einzelnen per ESC schließen.
Vielen Dank für deine Hilfe.
Grüße
Bene
Anzeige
AW: ...und hier noch ohne VBA
24.10.2016 19:04:47
Martin
Hallo Bene,
mit VBA ist wirklich "fast" alles möglich. Auch Warnmeldungen können unterdrückt werden:
Private Sub Workbook_Open()
'Variablen deklarieren
Dim strOldDate As String, strNewDate As String
'Datum vom Vormonat ermitteln
strOldDate = Format(DateSerial(Year(Date), Month(Date), 0), "YYYY-MM")
'Aktuelles Datum ermitteln
strNewDate = Format(Date, "YYYY-MM")
With Application
'Automatische Berechnung abschalten
.Calculation = xlCalculationManual
'Keine Warnmeldungen
.DisplayAlerts = False
'Formeln ersetzen
Worksheets("status_pcl").Cells.Replace What:=strOldDate, Replacement:=strNewDate,  _
LookAt:=xlPart
'Automatische Berechnung einschalten
Application.Calculation = xlCalculationAutomatic
'Warnmeldungen aktivieren
.DisplayAlerts = True
End With
End Sub
Es wäre aber auch möglich vor dem Erneuern des Dateinamens zu kontrollieren, ob der neue Dateipfad überhaupt gültig ist. Sonst steht in allen Zellen "#BEZUG!".
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
25.10.2016 08:46:18
Benedikt
Auch das funktioniert perfekt. Wie hast du VBA gelernt?
Das mit dem #BEZUG habe ich über die Formel gelöst, so dass er mir anzeigt, dass es keine Rückmeldung gibt.
Ich denke, dass die Datei jetzt wirklich gut funktioniert. Dank deiner Hilfe.
Wirklich vielen herzlichen Dank.
Grüße
Bene
Anzeige
AW: ...und hier noch ohne VBA
25.10.2016 19:03:03
Martin
Hallo Bene,
ich freue mich, dass alles zu deiner Zufriedenheit funktioniert.
Wie ich VBA gelernt habe? Bei mir fing alles unter Excel 5 an, damals waren die Makros sogar noch in deutscher Sprache (das ist kein Witz!). Schon damals gab es die Möglichkeit Makros aufzuzeichnen, was ich auch regelmäßig gemacht habe. Dann hatte ich mir den aufgezeichneten Makrocode angesehen und versucht nachzuvollziehen. Anschließend habe ich einige Änderungen vorgenommen und herumprobiert. Mit Excel 97 kam dann der Schock, als alle meine deutschsprachigen Makros ins Englische übersetzt wurden. Aber die Umstellung war leichter als erwartet. Wenn ich Fragen hatte, habe auch ich Herbers Excel-Forum konsultiert (bin hier seit 15 Jahren registriert). Zudem habe ich mir die Probleme anderer User angesehen und geschaut, welche Lösungen gefunden bzw. angeboten wurden. Außerdem wollte ich ein Projekt umsetzen, an das ich sehr hohe Ansprüche gestellt habe. Damals hatte ich damit sogar bei Jugend forscht in der Sparte Informatik auf Landesebene eine Auszeichnung erhalten - aber damals war ich noch jung ;-)
Heute freue ich mich wie ein kleines Kind, wenn ich mal etwas Neues lerne, was mir bislang unbekannt war. Manchmal gibt es auch unglaublich interessante und komplex gedachte Lösungswege, wodurch ich selbst heute meinen bisherigen Code weiter optimieren kann. Ich bin wirklich ein richtiger Excel-VBA-Fan.
Viele Grüße
Martin
Anzeige
AW: ...und hier noch ohne VBA
26.10.2016 08:15:01
Benedikt
Hi Martin,
ich werde auf jeden Fall dran bleiben. Die VBA Lösungen sind um einiges schöner als via Formel.
Gut Ding will Weile haben.
Danke noch mal
Grüße
Bene
AW: Teil des Dateipfads als Variable deklarieren
20.10.2016 11:07:40
Daniel
Hi
vielleicht kannst du die Verknüpfungen auch über die Menüfunktion
Daten - Verbindungen - Verknüpfungen bearbeiten - Quelle ändern
auf die neuen Dateien "umbiegen".
Dass musst du dann zwar für jede Datei einzeln machen, aber du hast hier besser im Überblick, welche neuen Dateien vorhanden sind und welche nicht.
Gruß Daneil
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Teil des Dateipfads als Variable deklarieren


Schritt-für-Schritt-Anleitung

  1. Datum als Variable deklarieren: Erstelle eine benutzerdefinierte Funktion (UDF), um das aktuelle Datum im gewünschten Format zu erhalten. Füge dazu folgenden VBA-Code in den VBA-Editor (Alt+F11) ein:

    Function MeinDatum() As String
        MeinDatum = Year(Date) & "-" & Format(Month(Date), "00")
    End Function

    Du kannst diese Funktion in einer Zelle als =MeinDatum() verwenden, um das Datum dynamisch zu generieren.

  2. Verwenden der INDIREKT-Funktion: Nutze die INDIREKT-Funktion, um auf Zellen in anderen Arbeitsmappen zuzugreifen. So kannst du den dynamischen Dateipfad mit deinem Datum kombinieren:

    =INDIREKT("'[blablalbalblalbalbalba_" & MeinDatum() & ".xlsm]Tabellenname'!$B$5")
  3. Formel zur Ermittlung des Datums ohne VBA: Alternativ kannst du auch die Excel-Formel verwenden, um das heutige Datum zu erhalten:

    =TEXT(HEUTE();"JJJJ-MM")
  4. Formeln ersetzen: Um sicherzustellen, dass deine Formeln immer auf den aktuellen Monat verweisen, kannst du ein Event-Makro im VBA-Editor hinzufügen:

    Private Sub Workbook_Open()
        Dim strOldDate As String, strNewDate As String
        strOldDate = Format(DateSerial(Year(Date), Month(Date), 0), "YYYY-MM")
        strNewDate = Format(Date, "YYYY-MM")
        Worksheets("status_pcl").Cells.Replace What:=strOldDate, Replacement:=strNewDate, LookAt:=xlPart
    End Sub

Häufige Fehler und Lösungen

  • #BEZUG! Fehler: Dieser Fehler tritt auf, wenn die INDIREKT-Funktion auf eine geschlossene Arbeitsmappe zugreift. Stelle sicher, dass die Datei geöffnet ist oder verwende feste Bezüge.

  • Automatisches Pop-up: Wenn Excel beim Zugriff auf nicht vorhandene Dateien ein Fenster öffnet, kann dies durch die Deaktivierung von Warnmeldungen im VBA-Code umgangen werden:

    With Application
        .DisplayAlerts = False
        ' weitere Befehle...
        .DisplayAlerts = True
    End With

Alternative Methoden

  • Manuelle Verknüpfungen ändern: Du kannst die Menüfunktion Daten - Verbindungen - Verknüpfungen bearbeiten - Quelle ändern verwenden, um die Verknüpfungen manuell auf den neuen Dateipfad zu ändern.

  • Excel Datum letzte Änderung "ohne VBA": Du kannst das Datum der letzten Änderung einer Datei in einer Zelle anzeigen lassen, indem du die Funktion =DATEVALUE(<Dateipfad>) verwendest, um das Änderungsdatum zu extrahieren.


Praktische Beispiele

  1. Zelleninhalt dynamisch aktualisieren: Wenn du den aktuellen Dateipfad in Zelle A1 hast und das Datum in Zelle B1, kannst du Folgendes verwenden:

    =A1 & "blablalbalblalbalbalba_" & B1 & ".xlsm"
  2. Verwendung der DATEVALUE-Funktion: Um das Datum der letzten Änderung einer bestimmten Datei zu erfassen, kannst du:

    =DATEVALUE("C:\Dein\Dateipfad\Dateiname.xlsx")

Tipps für Profis

  • VBA variable deklarieren: Stelle sicher, dass du alle Variablen in deinem VBA-Code deklarierst, um den Code übersichtlich und leicht wartbar zu halten.

  • Makros aufzeichnen: Nutze die Makro-Aufzeichnungsfunktion in Excel, um mehr über VBA zu lernen. Dies kann dir helfen, die Struktur und Syntax besser zu verstehen.


FAQ: Häufige Fragen

1. Wie kann ich den aktuellen Dateipfad in Excel einfügen? Du kannst den aktuellen Dateipfad mit der Funktion =ZELLE("Dateiname") abrufen.

2. Funktioniert die INDIREKT-Funktion auch mit geschlossenen Arbeitsmappen? Nein, die INDIREKT-Funktion kann nur auf geöffnete Arbeitsmappen zugreifen. Verwende feste Bezüge für geschlossene Dateien.

3. Gibt es eine Möglichkeit, Formeln automatisch bei Arbeitsmappenöffnung zu aktualisieren? Ja, durch das Hinzufügen eines Event-Makros im VBA-Editor kannst du Formeln automatisch aktualisieren, wenn die Arbeitsmappe geöffnet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige