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 werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus 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.

VBA: Dateiübergreifend kopieren
#1
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!
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Hofmanna
Antworten Top
#3
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
Antworten Top
#4
Hallo Hofmanna,

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

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Hofmanna
Antworten Top
#5
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?
Antworten Top
#6
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Hofmanna
Antworten Top
#7
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.
Antworten Top
#8
Hallo, :19:

könntest du mal eine abgespeckte ".D06-Datei" hier hochladen? Dann sehen wir weiter... :21:
________
Servus
Case
Antworten Top
#9
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.


Angehängte Dateien
.txt   010100.D06.txt (Größe: 33,42 KB / Downloads: 3)
Antworten Top
#10
Hallo, :19:

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

OK - hat ja nun geklappt. Angel
________
Servus
Case
Antworten Top


Gehe zu:


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