Clever-Excel-Forum

Normale Version: VBA: Dateiübergreifend kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Tag zusammen,

ich bin gerade auf euer Forum gestoßen und hoffe, dass Ihr mir weiterhelfen könnt.

Ich habe folgendes Anliegen:
Ich möchte in meine Excel Datei mit der ich hauptsächlich arbeite (ExcelHaupt) Werte aus einer anderen Tabelle (ExcelRoh) einfügen.

Weitere Informationen:
- Der Name der Hauptdatei ist immer gleich: "ExcelHaupt"
- Die ExcelHaupt Datei wird, nachdem die Daten kopiert wurden, an einem anderen Ort und unter anderem Namen abgespeichert. Sie dient also eigentlich als eine Art Vorlage.
- Die Namen der ExcelRoh Dateien sind immer Daten ohne punkte oder andere Trennungen. z.B.: "110119"  (11.01.2019) Jeder Tag hat also eine eigene Excel Datei.
- ExcelRoh besteht ausschließlich aus Rohdaten.
 
Meine Vorstellung, was VBA für mich übernehmen könnte:
Ich klicke auf einen Button bzw. eine Schaltfläche in der ExcelHaupt, daraufhin scannt Excel im Tabellenblatt "Tabelle1"  die Zelle "A1". In der Zelle A1 habe ich vorher den zu suchenden Dateinamen der ExcelRoh eingegeben. In diesem Fall also "110119". Nun sucht Excel nach genau diesem Dateinamen in folgendem Ordner: C:\Users\Daten\Rohdaten. (In diesem Ordner werden ALLE ExcelRoh von jedem Tag der letzten Jahre gespeichert. Ja es sind einige Tausend Dateien...) Nun sollen aus dieser Datei alle Daten von A2:BN5000 kopiert werden. (Falls möglich, ohne das man diese Datei überhaupt öffnen muss) Die kopierten Daten sollen nun in der ExcelHaupt im Tabellenblatt "Tabelle2" ab der Zelle C2 eingefügt werden. Und das wars schon.
 
Leider bin ich ein absoluter VBA Neuling und habe keine Ahnung wie ich das ganze angehen soll.
Ich hoffe Ihr könnte mir dabei helfen. Vielen Dank im Voraus!
Hallo,

z.B. so:
Sub RohdatenImport()
 Dim strDateiname As String
 Dim strPfad As String
 
 strDateiname = Tabelle1.Range("A1").Value & ".xlsx"
 strPfad = "C:\Users\Daten\Rohdaten\"
 
 If Dir(strPfad & strDateiname, vbNormal) = strDateiname Then
   If MsgBox("Daten holen aus " & strPfad & strDateiname & "?" & _
             vbNewLine & "Das kann aber etwas dauern.", vbYesNo + vbQuestion) = vbYes Then
     Application.ScreenUpdating = False
     With Tabelle2.Range("C2:BP5000")
       .Formula = "='" & strPfad & "[" & strDateiname & "]Tabelle1'!A2"
       .Value = .Value
       .Parent.Activate
     End With
     Application.ScreenUpdating = True
   End If
 Else
   MsgBox strPfad & strDateiname & " wurde nicht gefunden.", vbOKOnly + vbInformation
 End If
End Sub
Siehe auch hier:
Wie und wo fügt man ein Makro bzw. Code ein
Makro einer Schaltfläche zuweisen

Gruß Uwe
Hallo Kuwer,

vielen vielen Dank für die schnelle Antwort!

Ich habe den Code eben auf meine Bedürfnisse angepasst (echte Pfade usw.) und getestet.
Und es funktioniert auch fast alles.

Das einzige was nicht richtig hinhaut ist das kopieren. In alle Felder zwischen C2 und BP5000 schreibt Excel einfach nur: #BEZUG!
Habe ich bei meinen Anpassung etwas verkehrt gemacht?    Undecided
Oder liegt es daran, dass die ExcelRoh mit .D06 endet?

Hier der Code:

Sub RohdatenImport()
 Dim strDateiname As String
 Dim strPfad As String
 
 strDateiname = Tabelle1.Range("G46").Value & ".D06"
 strPfad = "K:\WBH_Daten\dofen6\data\"
 
 If Dir(strPfad & strDateiname, vbNormal) = strDateiname Then
   If MsgBox("Daten holen aus " & strPfad & strDateiname & "?" & _
             vbNewLine & "Das kann aber etwas dauern.", vbYesNo + vbQuestion) = vbYes Then
     Application.ScreenUpdating = False
     With Tabelle9.Range("C2:BP5000")
       .Formula = "='" & strPfad & "[" & strDateiname & "]Tabelle1'!A46"
       .Value = .Value
       .Parent.Activate
     End With
     Application.ScreenUpdating = True
   End If
 Else
   MsgBox strPfad & strDateiname & " wurde nicht gefunden.", vbOKOnly + vbInformation
 End If
End Sub
Hallo Hofmanna,

die Quelldatei sollte eine Exceldatei sein, was ich in Deinem Code aber nicht erkennen kann.

Gruß Uwe
Ja, ich musste leider eben erst feststellen, dass es sich um eine .D06 (Das Dateiformat ist wohl Firmenintern) handelt. Allerdings können wir dieses Format ganz normal mit Excel öffnen und bearbeiten. Also sollte es doch möglich sein, dass Excel das auch schafft oder? Huh
Kann man Excel nicht sagen, dass er es mit "Öffnen mit... Microsoft Excel" öffnet?
Hallöchen,

Zitat:Nun sollen aus dieser Datei alle Daten von A2:BN5000 kopiert werden. (Falls möglich, ohne das man diese Datei überhaupt öffnen muss)

Ich könnte mir vorstellen, dass es sich beim Format D06 um ein "umbenanntes" csv-Format handelt - Du schreibst ja, dass Du die Datei mit Excel öffnen kannst. Da gibt es aber in der Datei keine Zellen, Excel ordnet das beim Öffnen nur so zu …

Entweder Du machst die Datei auf oder Du schaust mal auf der von Uwe verlinkten Seite bei VBA - Tutorials nach ADO. Da gibt's auch einen Abschnitt mit Daten aus Textdateien einlesen. Ist etwas komplexer als der bisher gepostete Code Sad
Hallo schauan,

ich bedanke mich für deine Antwort. Ich vermute, dass die .D06 eher auf .txt basiert. Wenn ich eine .D06 öffne und auf "Speichern unter" gehe, dann schlägt er mir als erstes "Text (Tabstopp-getrennt) (*txt)" vor.
Hallo, :19:

könntest du mal eine abgespeckte ".D06-Datei" hier hochladen? Dann sehen wir weiter... :21:
Gute Idee. Hoffe Ihr könnt damit etwas anfangen. Smile Nach unten raus habe ich die meisten Werte gelöscht, aber das sollte ja nicht stören.

Edit: Oh, ich sehe gerade. Der Dateityp wird nicht akzeptiert. Ich habe nun hinter den Dateinamen mal ein .txt gepackt.
Hallo, :19:

kein Bild - die Datei (nötigenfalls zippen). :21:

OK - hat ja nun geklappt. Angel
Seiten: 1 2