Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1460to1464
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

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

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

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

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

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige