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

Dateinamen in Makro übernehmen

Forumthread: Dateinamen in Makro übernehmen

Dateinamen in Makro übernehmen
02.12.2015 08:02:25
Maik
Hallo liebe User,
heute mal ein neues Problemchen ;)
ich habe ein Makro welches mir über einen Dateidialog eine zweite Datei öffnet und aus dieser Daten in die geöffnete Datei kopiert. Dies funktioniert auch reibungslos solange es die beiden Dateinamen im Makro auch gibt. Hier mal der Code:

Sub DateiÖffnenMitFehlerroutine()
Dim Dateiauswahl As Variant
erneut:
Dateiauswahl = Application.GetOpenFilename
If Dateiauswahl  False Then
Workbooks.Open Filename:=Dateiauswahl
Else
If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwä _
hlen, oder 'Abbrechen' um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
GoTo erneut
Else
Exit Sub
End If
End If
Windows("Schichten.xlsx").Activate
Columns("A:BA").Select
Selection.Copy
Windows("Arbeitszeit Maik.xlsm").Activate
Range("JF1").Select
ActiveSheet.Paste
Range("JH1").Select
End Sub

1. Problem:
Der Dateiname "Schichten" ist von mir vorgegeben und soll auch so verwendet werden. Es wäre nur schön wenn eine andere (falsche) Datei geöffnet wurde nicht das Makro mit einer Fehlermeldung abbricht sondern eine Msg-Box aufpoppt die wieder zum Punkt "erneut:" oder zum Makroende springt. Also müsste der Code den Namen der geöffneten Datei mit dem Namen im Makro (hier "Schichten.xlsx") vergleichen.
2. Problem:
Aus der Datei "Arbeitszeit Maik.xlsm" wird das Makro gestartet. Nun möchte ich aber das sich dieser Eintrag je nach vergebenen Dateinamen automatisch aktualisiert, denn ich habe mehrere Kollegen welche sich diese Arbeitsmappe unter anderen Namen abspeichern.
Vielen Dank für Eure Bemühungen.
LG Maik

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Dateinamen in Makro übernehmen
02.12.2015 09:34:27
Rudi
Hallo,
Sub DateiÖffnenMitFehlerroutine()
Dim Dateiauswahl As Variant, wkb As Workbook
erneut:
Dateiauswahl = Application.GetOpenFilename
If Dateiauswahl  False Then
Set wkb = Workbooks.Open(Filename:=Dateiauswahl)
Else
If MsgBox("Es wurde keine Datei ausgewählt. " _
& "Klicken Sie 'OK' um eine Datei auszuwählen oder 'Abbrechen' " _
& "um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
GoTo erneut
Else
Exit Sub
End If
End If
wkb.ActiveSheet.Columns("A:BA").Copy _
ThisWorkbook.ActiveSheet.Range("JF1")
End Sub
Gruß
Rudi

Anzeige
AW: Dateinamen in Makro übernehmen
02.12.2015 17:49:15
Maik
Hallo Rudi,
vielen Dank erst einmal, aber leider ist das erste Problem nicht gelöst.
zu 1.
Nun wird die im Dialog geöffnete Datei OHNE PRÜFUNG des Dateinamens verwendet. Diese Prüfung ist aber zwingend notwendig da die Daten ausschließlich in der Datei "Schichten.xlsx" stehen. Bei deiner Änderung kann man aber auch eine Datei z.B. mit dem Namen "Orte.xlsx" öffnen und das Makro wird bis zum Ende ausgeführt.
Gruß Maik

Anzeige
AW: Dateinamen in Makro übernehmen
03.12.2015 01:01:57
Michael
Hi zusammen,
warum überhaupt einen Dialog zum Öffnen, wenn es nur *eine* feste Datei gibt?
Ein unbedarfter Anwender kriegt die Krise, wenn er in einer Endlosschleife hängt und nicht weiß, was er nun öffnen soll...
Sub AusSchichtenKopieren()
Dim wkb As Workbook
Set wkb = Workbooks.Open(Filename:="C:\Pfad\Schichten.xlsx")
wkb.ActiveSheet.Columns("A:BA").Copy _
ThisWorkbook.ActiveSheet.Range("JF1")
wkb.close SaveChanges:=False
End Sub
Schöne Grüße,
Michael

Anzeige
AW: Dateinamen in Makro übernehmen
03.12.2015 13:28:42
Maik
Hallo Michael,
danke für die Antwort, naja, die "feste" Datei bezieht sich nur auf dem Namen der Datei, nicht aber den Speicherort da ich die Datei zum Download anbiete und nicht weiß wo der Anwender diese abspeichert. Deshalb ist der Dialog notwendig, der Anwender kennt aber den Namen der Datei. Ich möchte trotzdem das versehentliche öffnen einer anderen Datei ausschließen. Dies hätte dann ungeahnte Auswirkungen beim anschließenden Kopiervorgang ;)
Was ich erreichen möchte ist das der Dateiname überprüft wird. Ich lege den Namen im Makro fest, nur der Pfad müsste nach dem öffnen übernommen werden.
Set wkb = Workbooks.Open(Filename:="C:\Pfad\Schichten.xlsx")
Hier bleibt dein Code stehen weil der Pfad zur Datei "Schichten.xlsx" nicht stimmt da dieser sich verändert. Und wenn ich eine andere Datei öffne bricht das Makro mit einer Fehlermeldung ab. An dieser Stelle sollte aber eine Msg-Box kommen mit der Auswahl zum erneuten öffnen der richtigen Datei oder Abbruch des Vorganges.
LG Maik

Anzeige
AW: Dateinamen in Makro übernehmen
03.12.2015 13:30:11
Maik
sorry, hatte vergessen als nicht gelöst zu markieren :)

AW: Dateinamen in Makro übernehmen
03.12.2015 17:01:53
Michael
Hallo Maik,
na wenn das so ist...
Ich habe solche Sachen in meinen eigenen Datein so gelöst: es gibt einen Button, der quasi der grundsätzlichen Konfiguration des Programms dient, d.h. zunächst wird der Pfad zur gewünschten Datei ermittel und (auch für den Anwender sichtbar) in Excel gespeichert.
Die eigentliche Kopieraktion wird dann mit dem einmal als "Konfiguration" gespeichertem Pfad+Namen ausgeführt.
Ich meine, jedes Programm ermittelt oder definiert erst Mal irgendwelche Pfade zu den beteiligten Datein, siehe z.B. Excel:
Userbild
Schöne Grüße,
Michael

Anzeige
AW: Dateinamen in Makro übernehmen
03.12.2015 19:30:54
Maik
Hallo Michael,
das stimmt ja alles so lang es meinen Rechner betrifft, aber ich kenne doch nicht die Ordnerstruktur meiner Kollegen, deshalb sollte der Pfad zur Datei ausgelesen werden
LG Maik

ja, richtig,
03.12.2015 21:29:21
Michael
Maik,
aber doch nur *einmal*, nicht jedesmal, wenn er das Programm benutzt.
D.h. er bekommt die Kopie von Dir, und als allererstes klickt er den Button "konfigurieren", wo er sich den Pfad zusammensucht, und dann ist er wo auch immer gespeichert und ändert sich ja nicht laufend.
Das könnte man zur Not noch abfragen: if dir (pfad&datei)="" then abfragen else kopieren.
Verstehst, wie ich mein?
LG Michael

Anzeige
AW: ja, richtig,
03.12.2015 22:21:55
Maik
Hallo,
in einem Einzelfall mag das stimmen, jedoch kommt es im Jahr bis zu 7 mal vor das ich eine aktualisierte Datei anbiete. Ich wollte nur hier nicht alles noch komplizierter machen. Ich wollte dann den Code für die Dateien abändern und per Button die jeweiligen Dateien kontrolliert in die Arbeitsdatei einkopieren. Es gibt also ein Tabellenblatt mit 7 Bereichen in die eine bestimmte Datei kopiert werden soll ( Schichten 1 ; Schichten 2 ; usw ). Für mich am einfachsten wäre das nach dem auswählen der Datei im Makro der geöffnete Dateiname mit einem im Makro festgelegten (weil von mir vergeben) Dateinamen verglichen wird und nur bei Übereinstimmung kopiert wird. Und wenn der Name nicht übereinstimmt soll eine Msg-Box aufgehen.
Ich glaub ich kann mich nicht so gut ausdrücken, hoffe aber du verstehst jetzt.
LG Maik

Anzeige
ein Versuch
04.12.2015 00:03:17
Michael
Hi Maik,
ich habe Rudis Schnipsel etwas erweitert, teste bitte mal:
Option Explicit
Sub DateiÖffnenMitFehlerroutine()
Dim Dateiauswahl As Variant, wkb As Workbook
Dim test As String
erneut:
Dateiauswahl = Application.GetOpenFilename("Excel-Datein (*.xlsx), *.xlsx")
If Dateiauswahl  False Then
test = Mid(Dateiauswahl, InStrRev(Dateiauswahl, "\") + 1)
If InStr(1, test, "Schichten", vbTextCompare) > 0 Then
Set wkb = Workbooks.Open(Filename:=Dateiauswahl)
wkb.ActiveSheet.Columns("A:BA").Copy _
ThisWorkbook.ActiveSheet.Range("JF1")
wkb.Close
Else
If MsgBox("Bitte suchen Sie nach der Datei: Schichten*.xlsx" & vbLf _
& "Klicken Sie 'OK' um eine Datei auszuwählen oder 'Abbrechen' " _
& "um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
GoTo erneut
Else
Exit Sub
End If
End If
Else
If MsgBox("Es wurde keine Datei ausgewählt. " & vbLf _
& "Klicken Sie 'OK' um eine Datei auszuwählen oder 'Abbrechen' " _
& "um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
GoTo erneut
Else
Exit Sub
End If
End If
End Sub
LG,
Michael

Anzeige
AW: ein Versuch
04.12.2015 11:03:51
Maik
Hallo,
WWWOOOOOWWWW, Suupiii !!!

jetzt funktioniert es so wie ich es mir vorgestellt habe. Das hätte ich mit meinen "Makrorecorderkenntnissen" niemals hinbekommen.
Vielen Dank an alle.
Eine Kleinigkeit noch, wbk.close wird mit einer Frage nach speichern der Datei "Schichten" beendet, kann man diese Abfrage noch umgehen? Es soll definitiv nicht gespeichert werden. Das ist aber nur noch das Bonbon ;)
LG Maik

Anzeige
freut mich erst Mal, und: klar doch!
04.12.2015 11:45:18
Michael
Hallo Maik,
Du kannst ja mal die Hilfe zum .Close recherchieren; es gibt hier z.B. die Möglichkeit, zusätzlich Parameter anzugeben wie z.B. den hier:
wkb.Close SaveChanges:=False
Weiterhin gibt es das display alerts, nachzulesen etwa hier:
http://www.online-excel.de/excel/singsel_vba.php?f=129
Kannst ja mal ein bißchen herumprobieren...
Happy Exceling,
Michael

Anzeige
AW: freut mich erst Mal, und: klar doch!
04.12.2015 13:13:57
Maik
na denn
ein besinnliches Weihnachten und Dank an alle für dieses tolle Forum :)
LG Maik
;
Anzeige
Anzeige

Infobox / Tutorial

Dateinamen in Makro übernehmen


Schritt-für-Schritt-Anleitung

Um den Namen einer Excel-Datei in einem Makro zu überprüfen und nur dann Daten zu kopieren, wenn der Dateiname übereinstimmt, kannst du den folgenden VBA-Code verwenden:

Option Explicit
Sub DateiÖffnenMitFehlerroutine()
    Dim Dateiauswahl As Variant, wkb As Workbook
    Dim test As String
erneut:
    Dateiauswahl = Application.GetOpenFilename("Excel-Dateien (*.xlsx), *.xlsx")
    If Dateiauswahl <> False Then
        test = Mid(Dateiauswahl, InStrRev(Dateiauswahl, "\") + 1)
        If InStr(1, test, "Schichten", vbTextCompare) > 0 Then
            Set wkb = Workbooks.Open(Filename:=Dateiauswahl)
            wkb.ActiveSheet.Columns("A:BA").Copy _
            ThisWorkbook.ActiveSheet.Range("JF1")
            wkb.Close SaveChanges:=False
        Else
            If MsgBox("Bitte suchen Sie nach der Datei: Schichten*.xlsx" & vbLf & _
            "Klicken Sie 'OK', um eine Datei auszuwählen, oder 'Abbrechen', " & _
            "um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
                GoTo erneut
            Else
                Exit Sub
            End If
        End If
    Else
        If MsgBox("Es wurde keine Datei ausgewählt. " & vbLf & _
        "Klicken Sie 'OK', um eine Datei auszuwählen, oder 'Abbrechen', " & _
        "um den Vorgang abzubrechen und das Makro zu beenden.", (vbOKCancel)) = vbOK Then
            GoTo erneut
        Else
            Exit Sub
        End If
    End If
End Sub

Dieser Code öffnet einen Dialog zur Dateiauswahl und überprüft den Dateinamen. Wenn der Dateiname nicht "Schichten.xlsx" ist, wird eine Msg-Box angezeigt.


Häufige Fehler und Lösungen

Fehler: Das Makro bricht ab, wenn eine falsche Datei ausgewählt wird.

Lösung: Stelle sicher, dass du die oben angegebene Logik im Code implementierst. So wird das Makro nicht abgebrochen, sondern zeigt eine Meldung an und fordert den Benutzer auf, eine neue Datei auszuwählen.

Fehler: Die Datei "Schichten.xlsx" wird nicht korrekt kopiert.

Lösung: Überprüfe, ob der Pfad zur Datei korrekt ist und ob die Datei tatsächlich existiert. Der Benutzer muss auch sicherstellen, dass die Datei nicht geöffnet ist, während das Makro läuft.


Alternative Methoden

Falls du keine Dialogbox verwenden möchtest, kannst du den Dateipfad direkt im Code angeben, wenn du sicher bist, dass die Datei immer am selben Ort gespeichert wird:

Sub AusSchichtenKopieren()
    Dim wkb As Workbook
    Set wkb = Workbooks.Open(Filename:="C:\Pfad\Schichten.xlsx")
    wkb.ActiveSheet.Columns("A:BA").Copy _
    ThisWorkbook.ActiveSheet.Range("JF1")
    wkb.Close SaveChanges:=False
End Sub

Diese Methode ist jedoch weniger flexibel, da sie den Pfad hart codiert.


Praktische Beispiele

Angenommen, du hast mehrere Versionen einer Datei, die du regelmäßig aktualisieren musst. Mit dem oben genannten Makro kannst du sicherstellen, dass du immer die richtige Datei öffnest und die Daten in deine Arbeitsmappe kopierst.

Hier ein Beispiel für die Verwendung des Makros:

  1. Klicke auf den Button, der das Makro ausführt.
  2. Wähle die Datei "Schichten.xlsx" über den angezeigten Dialog aus.
  3. Falls du eine falsche Datei auswählst, wirst du durch eine Meldung darauf hingewiesen und kannst eine neue Auswahl treffen.

Tipps für Profis

  • Verwende Application.DisplayAlerts = False, um Dialoge beim Schließen einer Datei zu unterdrücken, wenn du sicher bist, dass keine Änderungen gespeichert werden müssen.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass er auch unter verschiedenen Bedingungen (z.B. unterschiedliche Dateipfade) funktioniert.
  • Erwäge die Verwendung von Option Explicit in deinen Modulen, um sicherzustellen, dass alle Variablen deklariert sind und um mögliche Fehlerquellen zu minimieren.

FAQ: Häufige Fragen

1. Frage: Wie kann ich sicherstellen, dass das Makro immer die neueste Version der Datei verwendet?

Antwort: Du musst sicherstellen, dass die Datei jedes Mal manuell ausgewählt wird, oder du kannst das Makro so anpassen, dass es automatisch die Datei aus einem bestimmten Ordner öffnet.

2. Frage: Kann ich das Makro so anpassen, dass es mehrere Dateinamen überprüft?

Antwort: Ja, du kannst die Bedingung im Code erweitern, um mehrere Dateinamen zu berücksichtigen, indem du sie in einer Liste speicherst und mit einer Schleife überprüfst.

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