Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
308to312
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
308to312
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten übertragen mit Makro

Daten übertragen mit Makro
18.09.2003 19:10:18
dansmo
Hallo Zusammen,

das lästige Copy and Paste geht mir langsam auf den Keks.
Ich möchte Daten von .csv Dateien in bestimmte Tabellenblätter
einer .xls Datei übertragen.
Wie muss ein Makro aussehen, dass das bei Ausführung übernimmt?
Die.csv Datei befindet sich immer im Ordner C:\Temp und die .xls Datei im Ordner D:\Vorlagen. Am besten wäre es die Namen der benötigten Blätter in eine Maske immer manuell einzugeben bzw. mit der Maus anzuwählen. Ist das möglich?

Vielen Dank im Voraus für Hilfe,

dansmo

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten übertragen mit Makro
18.09.2003 19:41:11
ChrisL
Hi dansmo

Im Prinzip ist mir glaub ich klar worauf dass du hinaus willst, aber vielleicht kannst du den letzten Satz...

> Am besten wäre es die Namen der benötigten Blätter in eine Maske immer manuell einzugeben bzw. mit der Maus anzuwählen.

... ein bischen präzisieren. Du willst also jeden Import in ein einzelnes, neues Blatt übernehmen. Wie würde den die Auswahl für den Blattnamen mit der Maus z.B. lauten? Vielleicht kann man auch gleich automatisch durchnummerieren oder dem Blatt das aktuelle Datum geben oder sowas.

Ferner gibt es da beim CSV hin und wieder je nach Ländereinstellung Probleme. Mit welchem Trennzeichen sind die Spalten im CSV dargestellt. Vermutlich am einfachsten zeichnest du den Import mal mit dem Makrorekorder auf und zeigst den Code, dann kann ich den gleich übernehmen und bau dir dann noch den Rest ein.

Allerdings erst Morgen ok.

Gruss und bis dann
Chris
Anzeige
AW: Daten übertragen mit Makro
18.09.2003 21:50:08
dansmo
Hi Chris.

1. Die Daten werden eigenltlich in zwei unterschiedliche Tabellenblätter eingepflegt. Jede CSV aber für sich alleine. Die zwei Blätter heißen "Pattern_short" und "Pattern_long". Nun wäre es sinnvoll ein Programm zu haben, in dem ich zwischen diesen zwei Blättern auswähle und den genauen Dateinamen der CSV eingebe. Der ist nämlich auch immer unterschiedlich. Dann auf Enter drücken und der Datenübertrag läuft von alleine in die Zieldatei, die man vorher vielleicht auch noch benennen kann.

2. Das Problem mit der Ländereinstellung ist tatsächlich gegeben! Die Daten kommen aus einem US Programm. Als Trennzeichen nutzt dies Komma und Semicolon. Zudem ist der Punkt das Dezimaltrennzeichen. Das muss aber zum Komma transferiert werden!

Makrorekorder. Ich schau mal ob ich das hinkriege.

Beste Grüße,
Daniel
Anzeige
AW: Daten übertragen mit Makro
19.09.2003 13:41:48
ChrisL
Hi Daniel

Hier mal ein Gerüst...

Ablauf:
1. CSV Datei 1 wird geöffnet
2. CSV Datei 2 wird geöffnet
3. Speicherort Zieldatei wird abgefragt

Fehlt noch das Zusammenkopieren und vorallem Punkt 2.

Wäre gut wenn du mal etwas mit dem Makrorekorder aufzeichnen könntest. Auch wäre es nicht schlecht, wenn du für das Komma statt Punkt Problem mal die Recherche nach einem Makro durchstöberst. Bin dir dann bei der Einbindung schon behilflich.

Gruss
Chris


Option Explicit


Sub Import()
Dim fFile1 As Variant, fFile2 As Variant, neuFile As Variant
Dim DateiName1 As String, DateiName2 As String, neuDateiName As String
'On Error GoTo ErrorHandler
' Datei 1 öffnen
fFile1 = Application.GetOpenFilename("CSV-Report (*.csv), *.csv")
If fFile1 = False Then
If Workbooks.Count = 1 Then
Application.Quit
Exit Sub
Else
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Open FileName:=fFile1
DateiName1 = ActiveWorkbook.Name
' Datei 2 öffnen
fFile2 = Application.GetOpenFilename("CSV-Report (*.csv), *.csv")
If fFile2 = False Then
MsgBox "Der Vorgang wird vorzeitig abgebrochen."
If Workbooks.Count = 2 Then
Application.Quit
Exit Sub
Else
Workbooks(DateiName1).Close , False
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Open FileName:=fFile2
DateiName2 = ActiveWorkbook.Name
' Speicherort/-name neue Datei abfragen
neuFile = Application.GetSaveAsFilename("Zusammenfassung.xls")
If neuFile = False Then
MsgBox "Der Vorgang wird vorzeitig abgebrochen."
If Workbooks.Count = 3 Then
Application.Quit
Exit Sub
Else
Workbooks(DateiName1).Close , False
Workbooks(DateiName2).Close , False
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Add
ActiveWorkbook.SaveAs neuFile
neuDateiName = ActiveWorkbook.Name
'' Close this workbook
'ThisWorkbook.Saved = True
'ThisWorkbook.Close
'' Switch on screenupdating
'Application.ScreenUpdating = True
'Exit Sub
'ErrorHandler:
'MsgBox "Unexpected Error"
'Application.ScreenUpdating = True
End Sub

Anzeige
AW: Daten übertragen mit Makro
19.09.2003 16:55:06
dansmo
Hi Chris,

wie mache ich das mit dem makrorekorder? Ich habe keine Ahnung davon!

Daniel
AW: Daten übertragen mit Makro
19.09.2003 17:11:21
ChrisL
Hi Daniel

Extras, Makro aufzeichnen.

Und dann einfach mal das CSV öffnen wie du es sonst auch tun würdest. Aufzeichnung stoppen. Und dann wieder über Extras, Makros, Makro bearbeiten, den Code entnehmen. Anscheinend sind die beiden CSV Dateien ja unterschiedlich (Komma bzw. Semiko.). Also machst du es für beide Varianten und postest den Code.

Gruss
Chris
AW: Daten übertragen mit Makro
19.09.2003 19:59:12
dansmo
Hallo Chris,

es handelt sich immer um den GLEICHEN Typ von .CSV Dateien. Ich habe das alles mal aufgezeichnet. Com Öffnen bis zum Koperien und Einfügen in das Tabellenblatt der Zieldatei:

Gruss
Daniel


Sub test()
' test Makro
' Makro am 19.09.2003 von Ano Nym aufgezeichnet
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=True, Space:=False, Other:=False, FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1)), DecimalSeparator:=".", TrailingMinusNumbers:=True
Cells.Select
Selection.Copy
Sheets("Pattern_short").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Anzeige
AW: Daten übertragen mit Makro
22.09.2003 15:12:24
ChrisL
Hi Daniel

Nachstehend das angepasste Makro. Ist noch nicht ganz fertig, aber bereit zum Testen.

Füge das Makro in eine neue Datei ein (Alt + F11, einfügen, Modul und dort den Code reinkopieren) und speichere diese. Wenn du das Makro abspielst müsste eigentlich...

1. Dialog Datei öffnen (wähle CSV Short Pattern)
2. Dialog Datei öffnen (wähle CSV Long Pattern)
3. Neue Datei speichern unter... Wähle einen Speicherort.

Du müsstest nun eine Datei mit beiden Blättern erhalten.

Funktioniert die Umwandlung Text in Spalten? Als Trennzeichen zwischen den Spalten hast du übrigens gemäss deinem Code ein Tab und nicht wie erst angegeben Komma. Falls es nicht funktioniert, muss ich noch etwas nachprogrammieren. Die Frage wäre dann... Aus dem von dir angegebenen Codeteil ist ersichtlich, dass du 8 Spalten hast (A bis H). Ist dies auch bei Pattern long der Fall? Sind es immer 8 Spalten oder variabel?

Gruss
Chris

Option Explicit


Sub Import()
Dim i As Integer
Dim fFile1 As Variant, fFile2 As Variant, neuFile As Variant
Dim Datei1 As Workbook, Datei2 As Workbook, neuDatei As Workbook
Dim WS1 As Worksheet, WS2 As Worksheet
'On Error GoTo ErrorHandler
' Datei 1 öffnen
fFile1 = Application.GetOpenFilename("CSV-Report (*.csv), *.csv")
If fFile1 = False Then
If Workbooks.Count = 1 Then
Application.Quit
Exit Sub
Else
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Open FileName:=fFile1
Set Datei1 = ActiveWorkbook
Set WS1 = Datei1.Worksheets(1)
WS1.Name = "Pattern_short"
' Datei 2 öffnen
fFile2 = Application.GetOpenFilename("CSV-Report (*.csv), *.csv")
If fFile2 = False Then
MsgBox "Der Vorgang wird vorzeitig abgebrochen."
If Workbooks.Count = 2 Then
Application.Quit
Exit Sub
Else
Datei1.Close , False
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Open FileName:=fFile2
Set Datei2 = ActiveWorkbook
Set WS2 = Datei1.Worksheets(1)
WS2.Name = "Pattern_long"
' Speicherort/-name neue Datei abfragen
neuFile = Application.GetSaveAsFilename("Zusammenfassung.xls")
If neuFile = False Then
MsgBox "Der Vorgang wird vorzeitig abgebrochen."
If Workbooks.Count = 3 Then
Application.Quit
Exit Sub
Else
Datei1.Close , False
Datei2.Close , False
ThisWorkbook.Close
Exit Sub
End If
End If
Workbooks.Add
ActiveWorkbook.SaveAs neuFile
Set neuDatei = ActiveWorkbook
' Blätter in die neue Datei kopieren
Datei2.Worksheets(1).Copy Before:=neuDatei.Sheets(1)
Datei1.Worksheets(1).Copy Before:=neuDatei.Sheets(1)
' Datei1 und 2 schliessen
Application.DisplayAlerts = False
Datei1.Close , False
Datei2.Close , False
Application.DisplayAlerts = True
' Unnötige Blätter löschen
If neuDatei.Worksheets.Count > 2 Then
For i = Worksheets.Count To 3 Step -1
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Next i
End If
' neue Datei speichern
neuDatei.Save
' Vorlagedatei schliessen
ThisWorkbook.Saved = True
ThisWorkbook.Close
'' Switch on screenupdating
'Application.ScreenUpdating = True
'Exit Sub
'ErrorHandler:
'MsgBox "Unexpected Error"
'Application.ScreenUpdating = True
'Application.DisplayAlerts = True
End Sub

Anzeige
AW: Daten übertragen mit Makro
22.09.2003 22:46:08
daniel
Ok, ich schaffe es leider erst mir das morgen anzusehen!
Bis dahin...
Dankeschön
Daniel
AW: Daten übertragen mit Makro
24.09.2003 10:38:45
ChrisL
Hallo Chris,

das Makro funktioniert soweit!
Es werden immer die Spalten A bis G benötigt.
Das Problem ist nun aber, dass ich keine NEUE Datei möchte, sondern dass die Daten aus den beiden .csv Dateien direkt in eine bestimmte Datei geleitet werden. Gut wäre es also wenn ich mit einer weiteren Eingabemaske diese Datei anwählen könnte und dort die Blätter Pattern_long und Pattern_short bedient werden.

Danke für deine Mühen!
dansmo

--------------------------

Hi Daniel

> dort die Blätter Pattern_long und Pattern_short bedient werden.

Wie soll denn das genau gehen. Existieren denn in der Datei bereits zwei Blätter Pattern Short and Long und diese werden ersetzt? Oder sollen die Daten den bestehenden Blätter angefügt werden?

Gruss
Chris
Anzeige
AW: Daten übertragen mit Makro
24.09.2003 18:07:52
dansmo
Hi Chris
Diese Blätter existieren in der jeweiligen Datei bereits und sollen ersetzt werden.

Grüßle
Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige