Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Die Updates sind abgeschlossen. Bitte meldet eventuelle Bugs und Auffälligkeiten im entsprechenden Forum.
Sollte das Loginfenster nicht sichtbar sein, ist es unten links. Entweder Ihr loggt Euch dort ein oder löscht den Browsercache und versucht es noch einmal.


Daten aus anderer Datei
#1
Hallo,

es ist für mich schwierig mein Anliegen allein in der Überschrift klar zu definieren:

Mein Ziel ist es, in eine Auswertungsdatei die Informationen aus einer anderen Datei zu kopieren.
Grundsätzlich machbar, sieht zur Zeit so aus:


Code:
Sub Copy()
'
' Copy Makro
'
Range("A1").Select
ChDir "P:\Leistungsberichte\2016\KW 20"
Workbooks.Open Filename:= _
"P:\Leistungsberichte\2016\KW 43\KDFS_KW43_2016_Abrechnung_BI_Planic.xls" _
, Notify:=False
Sheets("Formular").Select
Range("A7:AT36").Select
Selection.Copy
Windows("KDFS_2016_Abrechnung_BI_mit Werten.xlsm").Activate
Range("A7").Select
ActiveSheet.Paste
Windows("KDFS_KW43_2016_Abrechnung_BI_Planic.xls").Activate
Application.CutCopyMode = False
ActiveWindow.Close False
Range("E5").Select
Selection.End(xlToLeft).Select
End Sub

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.

Vielen Dank für die Hilfe
Antwortento top
#2
Moin!
Schaue Dir mal die VBA-Hilfe zu Application.GetOpenFilename an.

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)
Antwortento top
#3
Hallo,

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

'Mappe Öffnen über Pfad + Datei  (Const Name)
Workbooks.Open Filename:=Pfad & Datei, Notify:=False

'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

'Mappe Öffnen über Pfad + Datei  (Const Name)
Workbooks.Open Filename:=Pfad & Datei, Notify:=False

'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
Antwortento top
#4
Vielen Dank schonmal.

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 Wink

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.


Angehängte Dateien
.xlsm   KDFS_2016_Abrechnung_BI_mit Werten_Makrotest.xlsm (Größe: 57,7 KB / Downloads: 1)
.xls   KDFS_KW43_2016_Abrechnung_BI_TK1.xls (Größe: 39,5 KB / Downloads: 1)
Antwortento top
#5
Hallo,

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.

mfg  Gast 123
Antwortento top
#6
Hallo,

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.  

mfg  Gast 123


Angehängte Dateien
.xlsm   KDFS_2016_Abrechnung_BI_mit Werten_Makrotest F.xlsm (Größe: 60,7 KB / Downloads: 2)
Antwortento top
#7
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 [Bild: wink.gif]

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)
Antwortento top
#8
Hallo Gast123,

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 Smile
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.

beste Grüße und danke für die Unterstützung
Antwortento top
#9
Hallo,

dann häng doch einfach den open-Befehl andas Ganze an.
Gruß
Opa Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antwortento top
#10
nur weil ich den open-Befehl dranhänge arbeitet doch das eigentliche Makro noch lange nicht damit.

... oder ich steh auf´m Schlauch
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste