Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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

Import via Button, Export Datei und Import Datei

Import via Button, Export Datei und Import Datei
16.08.2017 10:58:23
Daniel
Hallo Zusammen,
folgende Voraussetzungen habe ich für meine weitere Umsetzung.
Ich habe eine Excel Datei in der ich meine Makros laufen lasse, hier soll über ein Button "Import", eine Export Datei aus unserem ERP System geöffnet werden und dann der Inhalt entsprechend meines Markos in ein Arbeitsblatt (Vorlage) importiert werden.
Excel Dateien:
- Excel mit Makro (Master.xls)
Arbeitsblatt: Dateipfad Eingabe mit Import Button
Arbeitsblatt: Import_Sheet (hierhin werden die Daten von dem Export_Sheet kopiert, per Makro)
- Export aus ERP System (Export.xls)
Arbeitsblatt: Export_Sheet (Stammdaten aus ERP System, die Inhalte sollen später nach Arbeitsblatt Import_Sheet der Excel Datei mit Marko kopiert werden)
Im Anschluss soll das Arbeitsblatt "Import_Sheet" als neue Datei gespeichert werden mit dem aktuellen Datum als Dateiname.
Vielen Dank für die Unterstützung.
Export: https://www.herber.de/bbs/user/115514.xls
Master: https://www.herber.de/bbs/user/115515.xlsx

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Import via Button, Export Datei und Import Datei
17.08.2017 08:17:32
fcs
Hallo Daniel,
.... und dann der Inhalt entsprechend meines Markos in ein Arbeitsblatt (Vorlage) importiert werden.
Mit deinem Makro ist es in der Datei aber nooh nicht weit her ;-)
Ich hab dir mal etwas zusammengestellt.
Master-Datei: https://www.herber.de/bbs/user/115530.xlsm
Damit man nicht zuviel in der Programmierung checken muss, hab ich deine Import-Vorlage etwas angepasst.
- ab Zeile 4 bis zur letzten Zeile im Blatt sind alle Zeilen einheitlich formatiert.
- das Start-Datum in der Vorlage wird auf "Tabelle1" gesetzt.
- Im Import-Blatt wird das Datum in G1 per Formel übernommen und für die weiteren Tage berechnet
- Das Format für die Datumszellen ist angepasst, so das es wie bisher aussieht
- In Zeile 3 wird das Datum aus Zeile 1 per Formel übernommen, der Wochentag per Formatierung angezeigt.
Gruß
Franz
Anzeige
AW: Import via Button, Export Datei und Import Datei
17.08.2017 10:33:31
Daniel
Hey Franz,
wow - das ist ja nun mehr als erwartet. Chris aus diesem Forum hat mir folgenden Makro erarbeitet.
Diesen müsste ich theoretisch dann ab Stelle " 'Daten in Export-Tabelle kopieren und als Werte in Import-Blatt einfügen" in deinem Modul einfügen, richtig ?
'Vergleich der Überschriften von Tabelle1 mit Export
'Kopieren der jeweiligen Spalten, passend zur Überschrift
Public Sub Kopieren()
Dim WkSh_Quelle As Worksheet
Dim WkSh_Ziel As Worksheet
Dim rZelle As Range
Dim aUeberschr As Variant
Dim iIndx As Integer
Dim iSpalte As Integer
Dim lZeile As Long
aUeberschr = Array("Arbeitsplatz", "Material", "Bezeichnung", "Abladestelle", "Dispositiver  _
Bestand", "Rückstand")
Application.ScreenUpdating = False
Set WkSh_Quelle = Worksheets("Tabelle1") ' das Quell-Tabellenblatt
Set WkSh_Ziel = Worksheets("Tabelle4") ' das Ziel-Tabellenblatt
With WkSh_Quelle
For iIndx = 0 To UBound(aUeberschr)
Set rZelle = .Rows(1).Find(aUeberschr(iIndx), LookAt:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Then
iSpalte = iSpalte + 1
lZeile = .Cells(Rows.Count, rZelle.Column).End(xlUp).Row
WkSh_Ziel.Range(WkSh_Ziel.Cells(4, iSpalte), WkSh_Ziel.Cells(lZeile + 2, iSpalte)) = _
.Range(.Cells(2, rZelle.Column), .Cells(lZeile, rZelle.Column)).Value
End If
Next iIndx
End With
'Es wird das Format von Zeile 4 kopiert, wenn Spaltenlänge länger ist als die bisherige  _
formartierte Tabelle
WkSh_Ziel.Rows("4:4").Copy
WkSh_Ziel.Rows("5:" & lZeile + 2).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Sub DatumKopieren()
Dim WkSh_Quelle As Worksheet
Dim WkSh_Ziel As Worksheet
Application.ScreenUpdating = False
Set WkSh_Quelle = Worksheets("Tabelle1") ' das Quell-Tabellenblatt
Set WkSh_Ziel = Worksheets("Tabelle4") ' das Ziel-Tabellenblatt
'Datum 1-12
WkSh_Quelle.Range("V1:AG1").Copy
WkSh_Ziel.Range("G1:R1").PasteSpecial Paste:=xlPasteValues
'Wochentag ermitteln
Range("G3:R3") = Range("G1:R1").Value
Range("G3:R3").NumberFormat = "ddd"
'Löschen des Werts PBD-
Columns("G:R").Replace What:="PBD-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
'Kopiert die restlichen Werte unter das jeweilige
Sub DatumWerteKopieren()
Dim WkSh_Quelle As Worksheet
Dim WkSh_Ziel As Worksheet
Application.ScreenUpdating = False
Set WkSh_Quelle = Worksheets("Tabelle1") ' das Quell-Tabellenblatt
Set WkSh_Ziel = Worksheets("Tabelle4") ' das Ziel-Tabellenblatt
'Datum 1-12
WkSh_Quelle.Range("V2:AG900").Copy
WkSh_Ziel.Range("G4:R900").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
'Sortieren
Sub Sort()
Dim SortSpalte As Range
Application.ScreenUpdating = False
With Worksheets(3)
Range("A4:R60000").Select
Selection.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'AutoFit Spaltenbreite anpassen
'Columns("A:L").Select
'Range(Selection, Selection.End(xlToRight)).Select
'Cells.EntireColumn.AutoFit
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
'Sub Qwert()
'Dim ersteZelle As Range, letzteZelle As Range
'With Worksheets("Tabelle4")
'Set ersteZelle = .Range("A4")
'Set letzteZelle = .Range("A900")
'   With .Range(ersteZelle, letzteZelle)
'      .Merge
'     .HorizontalAlignment = xlCenter
' End With
'End With
'End Sub

Anzeige
AW: Import via Button, Export Datei und Import Datei
17.08.2017 12:12:38
fcs
Hallo Daniel,
wenn du schon eine Teil-Lösung hast, warum läßt du dann hier die Arbeit doppelt machen?
Ob du den Chris-Teil einfach so einfügen kannst weiss ich nicht. Kann ich auf die Schnelle nicht prüfen.
Warum? Passt meine Lösung nicht?
Willst du alle Datums-Werte aus dem ERP-Export in deinen Import übernehmen?
Ändern sich die die Reihenfolgen der Spalten im ERP-Export?
Gruß
Franz
AW: Import via Button, Export Datei und Import Datei
17.08.2017 13:32:26
Daniel
Hey Franz,
das war natürlich nicht meine Absicht, hier die Arbeit doppelt machen zu lassen! Sorry.
Ich bin eigentlich davon ausgegangen das klar ist, dass das "Kopier-Makro" bereits vorhanden ist.
Deine Lösung passt natürlich super!
- Ich möchte die ersten 12 Datums-Werte aus dem ERP-Export in meinen Import übernehmen?
- Im Anschluss soll nach Arbeitsplatz, Material und materialkurztext sortiert werden
- Wenn möglich, nicht zwingend nötig, dann noch alle gleichen Werte in der Spalte Arbeitsplatz gruppieren und innerhalb des Arbeitsplatzes das Material ebenfalls gruppieren.
- Die Grundstruktur der Tabelle bleibt immer gleich
- Die neue Datei soll in den Ordner C:\temp\export gespeichert werden
Danke dir.
Anzeige
AW: Import via Button, Export Datei und Import Datei
17.08.2017 16:13:37
Daniel
So funktioniert das dann auch mit dem Makro vom Chris.
Nun versuche ich das noch etwas zu optimieren - aber ist bisher super ! Danke Dir!
Option Explicit
Sub Schaltflaeche_Import()
Dim strFileName As String
Dim wkbExport As Workbook, wksExport As Worksheet
Dim Zeile_E As Long, Spalte_E As Long, Zeile_EL&, Spalte_EL&
Dim Zeile_I As Long, Spalte_I As Long
Dim datExp As Date, datImp As Date, strDatExp As String
Dim wkbImport As Workbook, wksImport As Worksheet
Dim rZelle As Range
Dim aUeberschr As Variant
Dim iIndx As Integer
Dim iSpalte As Integer
Dim lZeile As Long
aUeberschr = Array("Arbeitsplatz", "Material", "Bezeichnung", "Abladestelle", "Dispositiver  _
Bestand", "Rückstand")
Set wksImport = ThisWorkbook.Worksheets("Import_Sheet")
With ThisWorkbook.Worksheets("Standards")
strFileName = .Range("B11").Text
End With
If Dir(strFileName) = "" Then
MsgBox "SAP-Exportdatei" & vbLf & strFileName & vbLf & "nichtgefunden!", _
vbOKOnly, "Prüfen Name SAP-Export-Datei"
GoTo Beenden
End If
'Import-Sheet in neue Arbeitsmappe kopieren
wksImport.Copy
Set wkbImport = ActiveWorkbook
Set wksImport = wkbImport.Worksheets(1)
With wksImport
'Blattumbenennen
.Name = "Import " & Format(Date, "YYYY-MM-DD")
'Formeln in Datums-Zellen durch Werte ersetzen
With .Range(.Cells(1, 7), .Cells(1, .Columns.Count).End(xlToLeft))
.Value = .Value
End With
End With
With Application
.ScreenUpdating = False
End With
'Export-Datei öffnen
Set wkbExport = Application.Workbooks.Open(filename:=strFileName, ReadOnly:=True)
Set wksExport = wkbExport.Worksheets(1)
'Daten in Export-Tabelle kopieren und als Werte in Import-Blatt einfügen
With wksExport
For iIndx = 0 To UBound(aUeberschr)
Set rZelle = .Rows(1).Find(aUeberschr(iIndx), LookAt:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Then
iSpalte = iSpalte + 1
lZeile = .Cells(Rows.Count, rZelle.Column).End(xlUp).Row
wksImport.Range(wksImport.Cells(4, iSpalte), wksImport.Cells(lZeile + 2, iSpalte)) = _
.Range(.Cells(2, rZelle.Column), .Cells(lZeile, rZelle.Column)).Value
End If
Next iIndx
End With
'Es wird das Format von Zeile 4 kopiert, wenn Spaltenlänge länger ist als die bisherige  _
formartierte Tabelle
wksImport.Rows("4:4").Copy
wksImport.Rows("5:" & lZeile + 2).PasteSpecial Paste:=xlPasteFormats
'Datumsfelder 1-12
wksExport.Range("V1:AG1").Copy
wksImport.Range("G1:R1").PasteSpecial Paste:=xlPasteValues
'Löschen des Werts PBD-
wksImport.Columns("G:R").Replace What:="PBD-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'Wochentag ermitteln
wksImport.Range("G3:R3") = wksImport.Range("G1:R1").Value
wksImport.Range("G3:R3").NumberFormat = "ddd"
'Kopiert die restlichen Werte unter das jeweilige
wksExport.Range("V2:AG900").Copy
wksImport.Range("G4:R900").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
'Export-Datei wieder schliessen
wkbExport.Close savechanges:=False
Range("C4").Select
'Import-Datei Speichern
Application.DisplayAlerts = False 'Datei mit gleichem Datum wird ggf. ohne Rückfrage ü _
berschriebn
wkbImport.SaveAs filename:=ThisWorkbook.Path & Application.PathSeparator _
& "WEP_Produktionsliste " & Format(Date, "YYYY-MM-DD") & ".xlsx", _
FileFormat:=51, addtomru:=True
Application.DisplayAlerts = True
With Application
.ScreenUpdating = True
End With
Beenden:
End Sub

Anzeige
AW: Import via Button, Export Datei und Import Datei
18.08.2017 07:52:15
Daniel
Hey Franz,
nun stehe ich noch vor folgenden Problemen, die ich nicht gelöst bekomme - hast du da eine idee ?
- Im Anschluss soll nach Arbeitsplatz, Material und materialkurztext sortiert werden
- Wenn möglich, nicht zwingend nötig, dann noch alle gleichen Werte in der Spalte Arbeitsplatz gruppieren und innerhalb des Arbeitsplatzes das Material ebenfalls gruppieren.
Danke
Daniel
AW: Import via Button, Export Datei und Import Datei
18.08.2017 08:21:50
fcs
Hallo Daniel,
ich hab meine Version angepasst und erweitert.
https://www.herber.de/bbs/user/115546.xlsm
Es werden jetzt die ersten 12 Tage kopiert, sortiert und Gruppierungen mit Teilergebnissen erstellt. Der Speicherort für die Importdatei ist geändert.
Gruß
Franz
Anzeige
AW: Import via Button, Export Datei und Import Datei
18.08.2017 08:59:05
Daniel
Top das funktioniert super.
Wenn ich nun eine zweite ERP-Export Datei habe, mit neuer Vorlage im Master Excel und in ein weiteres Arbeitsblatt in die neu erstelle Datei importieren möchte, wie wäre hier die Umsetzung ?
AW: Import via Button, Export Datei und Import Datei
18.08.2017 12:07:47
fcs
Hallo Daniel,
Wenn ich nun eine zweite ERP-Export Datei habe, mit neuer Vorlage im Master Excel und in ein weiteres Arbeitsblatt in die neu erstelle Datei importieren möchte, wie wäre hier die Umsetzung ?
1. in Tabelle 1 legst du einen 2. Block an in dem der Name der 2. Exportdatei festgelegt/Eingegeben wird.
1a. Formatiere die neue Vorlage-Tabelle "hübsch"
Dabei sollten dann die Spalten jeweils komplett formatiert werden (Rahmen, Zahlenformat,Horizontale und vertikale Ausrichtung, Zeilenumbruch in Zelle etc.). Für alle Zeilen im Blatt legst du eine einheitliche Höhe fest.
Danach kümmerst du dich um die individulle Formatierung der Titelzeilen.
2. Im VBA-Projekt fügst du ein neues allgemeines Modul ein.
In dieses Modul kopierst du den kompletten Code aus dem vorhanden Modul
3. im neuen Modul benennst du das Hauptmakro "Schaltflaeche_Import" um.
4. In den Makros im neuen Modul muss du dann alles anpassen/ergänzen was abweichend ist.
Dies sind Blattnamen und Dateinamen, sowie alle Zeilen- und Spaltennummer, Zellbereiche.
In der Anfangsphase solltest du 2 Zeilen in denen die Makros für die Sortierung und das Erstellen der Gruppierung gestarte werden, zu Kommentaren machen. Darum kannst du dich kümmern, wenn der eigentliche Import steht.
LG
Franz
Anzeige
AW: Import via Button, Export Datei und Import Datei
18.08.2017 14:35:34
Daniel
Hallo Franz,
das funktioniert wunderbar.
Kann ich die zwei neuen Dateien auch irgendwie zu einer Datei mit zwei Arbeitsblättern zusammenfügen ?
Bzw. den Import aus der zweiten Datei auch in die bereits zuvor erstelle neue Datei einfügen?
Danke Dir
AW: Import via Button, Export Datei und Import Datei
19.08.2017 04:58:41
fcs
Hallo Daniel,
man kann die beiden Importe in einer Arbeitsmappe zusammenfassen.
Dazu muss man beim 2. Import "nur" dessen Vorlage-Tabelle aus der Master-Datei in die Datei mit dem 1. Import kopieren.
Um Fehler im Makro-Ablauf zu vermeiden müssen vor dem Kopieren aber ehrere Randbedingungen geprüft werden.
Dafür vereinfacht sich dann das Speichern.
LG
Franz
Sub Schaltflaeche_Import_Nr_2()
Dim strFileName As String
Dim wkbExport As Workbook, wksExport As Worksheet
Dim Zeile_E As Long, Spalte_E As Long, Zeile_EL&, Spalte_EL&
Dim Zeile_I As Long, Spalte_I As Long
Dim datExp As Date, datImp As Date, strDatExp As String
Dim wkbImport As Workbook, wksImport As Worksheet
Dim strDateiImport As String
Set wksImport = _
ThisWorkbook.Worksheets("Import_Sheet_Nr_2")  'Blattname für 2. Vorlage anpassen
With ThisWorkbook.Worksheets("Tabelle1")
strFileName = .Range("B14").Text 'Zelle mit Dateiname für 2. ERP-Datei ggf. anpassen
End With
If Dir(strFileName) = "" Then
MsgBox "ERP-Exportdatei" & vbLf & strFileName & vbLf & "nichtgefunden!", _
vbOKOnly, "Prüfen Name ERP-Export-Datei"
GoTo Beenden
End If
'Name der Datei/Arbeitsmappe des 1. Imports         -  ggf.anpassen
strDateiImport = "ERP-Import " & Format(Date, "YYYY-MM-DD") & ".xlsx"
'prüfen, ob Mappe mit 1. Import angelegt ist
If Dir("C:\TEMP\export" & Application.PathSeparator _
& strDateiImport) = "" Then
MsgBox "Der Import für die 1. ERP-Exportdatei wurde noch nicht durchgeführt", _
vbOKOnly, "Prüfen ob Datei aus 1. ERP-Import vorhanden"
GoTo Beenden
Else
'prüfen ob Datei geöffnet ist
For Each wkbImport In Application.Workbooks
If LCase(wkbImport.Name) = LCase(strDateiImport) Then
Exit For
End If
Next wkbImport
If wkbImport Is Nothing Then 'Datei st ncht geöffnet
Set wkbImport = Application.Workbooks.Open("C:\TEMP\export" _
& Application.PathSeparator & strDateiImport)
End If
End If
'Import-Vorlage in die Arbeitsmappe vom 1. Import kopieren
With wkbImport
'Prüfen, ob schon mehr als 1 Tabellenblatt in ERP-Import-Datei vorhanden ist.
If .Sheets.Count > 1 Then
If MsgBox("Die Arbeitsmappe enthält bereits ein Blatt mit einem 2. Import" _
& vbLf & "Blatt mit 2. Import ersetzen?", _
vbQuestion + vbOKCancel, _
"Prüfen Anzahl Blätter in ERP-Import-Datei") = vbOK Then
Application.DisplayAlerts = False
.Sheets(2).Delete
Application.DisplayAlerts = True
Else
GoTo Beenden
End If
End If
wksImport.Copy after:=.Sheets(1)
Set wksImport = wkbImport.Sheets(2)
End With
With wksImport
'Blattumbenennen
.Name = "Import Nr 2 " & Format(Date, "YYYY-MM-DD") 'Blatt-Name anpassen für 2. Import!
End With
With Application
.ScreenUpdating = False
End With
'Export-Datei öffnen
Set wkbExport = Application.Workbooks.Open(Filename:=strFileName, ReadOnly:=True)
Set wksExport = wkbExport.Worksheets(1)
'===== ab hier die Anpassungen für den 2. Import ================
'Daten in Export-Tabelle kopieren und als Werte in Import-Blatt einfügen
With wksExport
Zeile_EL = .Cells(.Rows.Count, 1).End(xlUp).Row
Zeile_I = 4
Spalte_I = 1: Spalte_E = 1 'Arbeitsplatz
.Range(.Cells(2, Spalte_E), .Cells(Zeile_EL, Spalte_E)).Copy
wksImport.Cells(Zeile_I, Spalte_I).PasteSpecial Paste:=xlPasteValues
Spalte_I = 2: Spalte_E = 9 'I, J , K Material-Bezeichnung-Abladestelle
.Range(.Cells(2, Spalte_E), .Cells(Zeile_EL, Spalte_E + 2)).Copy
wksImport.Cells(Zeile_I, Spalte_I).PasteSpecial Paste:=xlPasteValues
Spalte_I = 5: Spalte_E = 14 'Dispositiver Bestand
.Range(.Cells(2, Spalte_E), .Cells(Zeile_EL, Spalte_E)).Copy
wksImport.Cells(Zeile_I, Spalte_I).PasteSpecial Paste:=xlPasteValues
Spalte_I = 6: Spalte_E = 17 'Rückstand
.Range(.Cells(2, Spalte_E), .Cells(Zeile_EL, Spalte_E)).Copy
wksImport.Cells(Zeile_I, Spalte_I).PasteSpecial Paste:=xlPasteValues
Spalte_I = 7 'Spalte G
Spalte_E = 19 '1. Spalte in Export-Blatt mit Datum in Zeile 1
'1. zwölf Datumswerte  in Zeile 1 im Import-Blatt ab Zelle G1 einfügen
.Range(.Cells(1, Spalte_E), .Cells(1, Spalte_E + 11)).Copy
wksImport.Cells(1, Spalte_I).PasteSpecial Paste:=xlPasteValues
'Datumswerte aufbereiten
wksImport.Range("G1:R1").Replace What:="PBD-", replacement:="", lookat:=xlPart
With wksImport.Range("G3:R3") 'Wohentage
.Calculate
.Value = .Value 'Formeln durch Werte ersetzen
End With
'Werte zu den Tagen kopieren und als Werte einfügen
.Range(.Cells(2, Spalte_E), .Cells(Zeile_EL, Spalte_E + 11)).Copy
wksImport.Cells(Zeile_I, Spalte_I).PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
'Export-Datei wieder schliessen
wkbExport.Close savechanges:=False
Call Sortieren(wks:=wksImport)
Call Teilergebnisse(wks:=wksImport)
Range("C4").Select
'====== Änderung für Speichern der beiden Imports in einer Datei ======
'Import-Datei Speichern
wkbImport.Save
With Application
.ScreenUpdating = True
End With
Beenden:
End Sub

Anzeige
AW: Import via Button, Export Datei und Import Datei
21.08.2017 08:16:19
Daniel
Super das hat geklappt. ich danke dir.
Gruß
Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige