Jetzt soll aber nicht im Makro die Datei als solches beschrieben sein, sondern in der Excel-Oberfläche ein "Button" stehen, der die Möglichkeit bietet, eine Datei für diesen Vorgang auszuwählen. Sprich, dem starren Makro soll ein wenig Flexibilität abgewonnen werden. Die Infos aus den abzurufenden Dateien sind immer gleich strukturiert.
ich nehme an dein makro ist eine Makro Recorder Aufzeichnung. Profis programmieren anders, viel eleganter!! Ohne Select und Workbook.Activate.
Ich nehme bei Dateien Öffnen den Pfad immer ganz oben in eine Const Anweisung. Damit ist er konkret festgelegt Ausserdem braucht man noch das Zielblatt, wo hinein kopiert werden soll. Dann sieht der Code wie unten aus.
In der ersten Variante hole ich mir die Datei aus einer beliebigen Zelle, im Beispiel A1. Die zweite Möglichkeit ist mit InputBox wo abgefragt wird welche Datei geöffnet werden soll. Eine FehlerRoutine für Falscheingaben ist unerlaesslich, den wenn der Pfad oder der Dateiname nicht stimmt missglückt das Öffnen mit einem Laufzeitfehler. Deshalb die Fehler Meldung über MsgBox, wenns nicht klappt. Ob der letzte Select von dir nach Rechts nötig ist weiss ich nicht??
Probiers mal aus, würde mich freuen wenn mein Vorschlag klappt.
mfg Gast 123
Code:
Option Explicit '1.11.2016 Gast 123 Clever Forum
Const Pfad = "P:\Leistungsberichte\2016\KW 43\" 'mit "\" Const ZielBlatt = "xxxx" 'Name der Ziel Tabelle angeben
'Kopieren ohne Select und Windows.Activate
Sub Copy_Zelle() Dim Datei As String On Error GoTo Fehler 'Datei aus einer Zelle laden (hier A1) Datei = ThisWorkbook.Sheets("Formular").Range("A1").Value If Datei = "" Then MsgBox "kein Dateiname vorhanden": Exit Sub
'Name der Zieltabelle in der Zieldatei angeben !! ThisWorkbook.Sheets("Formular").Range("A7:AT36").Copy Worksheets(ZielBlatt).Range("A7").PasteSpecial xlPasteAll Application.CutCopyMode = False
ThisWorkbook.Activate Range("E5").End(xlToLeft).Select 'muss das sein ?? Exit Sub
Fehler: MsgBox "Fehler beim Öffnen" End Sub
Sub Copy_InputBox() Dim Datei As String On Error GoTo Fehler 'InputBox mit Wiederholung wenn Endung "xls." vergessen wurde wdh: Datei = InputBox("Bitte Dateiname angeben", "Datei Öffnen ...", Datei) If InStr(Datei, ".xl") = 0 Then MsgBox "Die Endung ',xl..' fehlt, bitte ergaenzen": GoTo wdh If Datei = Empty Then Exit Sub
'Name der Zieltabelle in der Zieldatei angeben !! ThisWorkbook.Sheets("Formular").Range("A7:AT36").Copy Worksheets(ZielBlatt).Range("A7").PasteSpecial xlPasteAll Application.CutCopyMode = False
ThisWorkbook.Activate Range("E5").End(xlToLeft).Select 'muss das sein ?? Exit Sub
Grundlegend ist es schonmal richtig, dass mir der Makrorekorder zur Seite stand. Daher kann ich auch mit dem gutgemeinten Hinweis von Ralf auf die VBA-Hilfe nichts anfangen ;)
Ich habe den Code von dir, Gast123, mal eingebunden. Leider kommt nur die Fehlermeldung "Fehler beim Öffnen" - entsprechend kann ich nicht einschätzen, was richtig und was falsch ist. Um das Ganze vllt. besser darstellen zu können, habe ich mal 2 Dateien angehangen. Zum einen die Datei welche ausgewertet werden soll (nur eine, von wöchentlich knapp 40) und zum anderen die Makrodatei, welche meine Arbeit erleichtern soll.
Es ist in der Form, wie du mir deinen Code beschrieben hast nicht hilfreich, den Dateinamen händig einzutippen. Zudem ist es für mich nicht sinnvoll den Pfad zu fixieren, weil die Techniker(TK) jeder seinen eigenen Ordner auf dem Server hat, den er über VPN "füttert". Ich kann auf alle diese Ordner zugreifen (lesen) aber die Dateien nicht verschieben.
Vielleicht kann man deinen Code in der Hinsicht optimieren.
ich habe mir die Beispieldateien heruntergeladen und schaue mir die Sache mal in Ruhe an. Dafür wird es sicher eine Lösung geben, brauche aber etwas Zeit dafür. Melde mich wieder.
in der Tat, bei der Länge der Dateinamen und das bei 40 Dateien macht eine InputBox keinen Sinn, zu umständlich!
Meine neue Lösung ist eine ComboBox (DropDown) im Formularblatt, die ihre Daten aus der Hilfstabelle "Dateiliste " bezieht. So kann man alle Dateien mit Pfadnamen in der Dateiliste auflisten, und die gewünschte Datei per DropDown KlickÖffnen. Den RangeBereich der Dateiliste bitte selbst in der ComboBox festlegen. Ich denke diese Lösung ist Praxisgerechter.
Würde mich freuen wenn das neue Makro zufriedenstellend funktioniert. Bitter erst mit Test Dateien prüfen ob das Makro richtig funktioniert, damit man nicht versehentlich Originaldaten zerstört. Erst dann ins Original übernehmen.
03.11.2016, 07:01 (Dieser Beitrag wurde zuletzt bearbeitet: 03.11.2016, 07:01 von RPP63.)
Schnüff. :22: Warum wird mein #2 nicht beachtet?
Zitat:Daher kann ich auch mit dem gutgemeinten Hinweis von Ralf auf die VBA-Hilfe nichts anfangen [img] Dateiupload bitte im Forum! So geht es: Klick mich! ]
Im VBA-Editor F1 drücken kann man doch auch als Anfänger? Ins Suchfeld Application.GetOpenFilename eingeben und lesen.
Als Beispiel:
Code:
Sub RPP() Workbooks.Open Application.GetOpenFilename End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
grundsätzlich funktioniert das Ganze wie gewünscht, aber ...
Es müssen ja die Dateinamen in deiner Version hinterlegt werden. Wenn jetzt eine gewisse Varianz entsteht, dass die Techniker "unsauber" ihre Daten pflegen, muss ich in dem Fall schauen, wie er seine Datei diesmal genannt hat. Bzw. kann ich mich nicht darauf verlassen, dass die Datei auch wirklich existent ist, wenn einer krank oder im Urlaub war. Daher die Frage, ob es nicht eine Option gibt (meinetwegen über Application.GetOpenFilename, ...) wo quasi alle möglichen xls-Dateien die in den verschiedenen Pfaden sind, aufgelistet werden.
Lieber Ralf :) natürlich bin ich in der Lage die VBA-Hilfe zu öffnen, zudem kann ich auch mit vorgegebenen Dinge rumdoktern. Im Falle von >>Application.GetOpenFilename<< komme ich soweit, dass beim Starten des Makros das "Öffnen"-Feld aufgeht und ich mir eine schicke xls aussuche ... und dann verließen sie ihn. Ich hab echt keinen Dunst, wie ich dann damit weiterarbeiten könnte. Ich komme sehr selten in die Situation VBA selbst zu programmieren, auch wenn ich es gern nutze.