Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
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
Werte aus einer .csv in ein Datenblatt kopieren
04.02.2017 19:09:55
Mike
Hallo
Ich möchte Daten aus einer CSV Datei in eine excel Datei kopieren. Die Anzahl der Zeilen ist dynamisch und soll über eine Variable festgestellt werden, dann sollen die Daten an das untere Ende der Datentabelle eingefügt werden.
1. Muss in der Datentabelle voher die bereits vorhanden Zeilen gezahlt werden oder kann man dies umgehen in dem man festgelegt, die Daten soll in die erste Zeile die frei ist kopiert werden ?
2. Hier der Code für den ersten Versuch :
Sub datenkopieren()
' datenkopieren Makro
Dim zeile As Integer
Dim datXLSB As String
Dim datXLS As String
Dim datCSV As String
Dim heute As Date
Dim wbXLSB As Workbook
Dim wsXLSB As Worksheet
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim pfad As String
Dim zeile1 As Integer
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
' 1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
zeile = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
zeile1 = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
With wsCSV
.Range("A2:M2" & zeile1).Copy
wbXLSB.Activate
.AutoFill Destination:=wsXLSB.Range("A2:A" & zeile)
ThisWorkbook.Activate
End With
End Sub
Danke schonmal im Voraus
Gruß Mike

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

Betreff
Datum
Anwender
Anzeige
AW: Werte aus einer .csv in ein Datenblatt kopieren
04.02.2017 21:48:05
Dieter
Hallo Mike,
mein Angebot steht noch, wenn du mir eine csv-Datei schickst, dann schreibe ich dir dazu das benötigte OpenText. Die Datei braucht nur wenige irrelevante Daten zu enthalten, nur der logische Aufbau muss so sein, wie deine echten csv-Dateien.
Im vorliegenden Fall kannst du den folgenden Code verwenden:
Sub datenkopieren()
' datenkopieren Makro
Dim letzteZeileXLSB As Integer
Dim letzteZeileCSV As Integer
Dim datXLSB As String
Dim datXLS As String
Dim datCSV As String
Dim heute As Date
Dim wbXLSB As Workbook
Dim wsXLSB As Worksheet
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim pfad As String
Dim zeile1 As Integer
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
' 1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
letzteZeileXLSB = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
letzteZeileCSV = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
wsCSV.Range("A2:M2").Resize(letzteZeileCSV - 1).Copy _
Destination:=wsXLSB.Cells(letzteZeileXLSB + 1, "A")
End Sub
Viele Grüße
Dieter
Anzeige
AW: Werte aus einer .csv in ein Datenblatt kopieren
04.02.2017 23:00:26
Mike
Hallo Dieter,
danke für dein Angebot ich möchte erstmal selbst auf die Lösung kommen, somit erweitere ich meine VBA - Kenntnisse.
Danke und Gruß Mike
AW: Werte aus einer .csv in ein Datenblatt kopieren
04.02.2017 23:31:48
Mike
Hallo Dieter,
danke, funktioniert perfekt.
Gruß Mike
AW: Werte aus einer .csv in ein Datenblatt kopieren
05.02.2017 00:37:09
Mike
Hallo Dieter,
ich hätte noch eine Herausforderung ,die Werte die in der Spalte D kopiert werden, sollen überprüft werden ob diese nummerisch sind. Wenn nicht soll eine Inputbox sich öffnen und den eine nummerische eingabe erfordern.
Diese Eingabe soll den vorhandenen wert ersetzten.
Mein Ansatz wäre eine IF then bedingung in eine Schleife.
Gruß Mike
Anzeige
AW: Werte aus einer .csv in ein Datenblatt kopieren
05.02.2017 12:10:44
Werner
Hallo Mike,
ich bin jetzt mal von der Eingabe von Ganzzahlen ausgegangen.
Sub datenkopieren()
' datenkopieren Makro
Dim letzteZeileXLSB As Integer
Dim letzteZeileCSV As Integer
Dim datXLSB As String
Dim datXLS As String
Dim datCSV As String
Dim heute As Date
Dim wbXLSB As Workbook
Dim wsXLSB As Worksheet
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim pfad As String
Dim zeile1 As Integer
Dim rngBereich As Range '##neu##
Dim rngZelle As Range '##neu##
Dim loZahl As Long '##neu##
Dim boZähler As Boolean '##neu##
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
'1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
letzteZeileXLSB = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
letzteZeileCSV = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
wsCSV.Range("A2:M2").Resize(letzteZeileCSV - 1).Copy _
Destination:=wsXLSB.Cells(letzteZeileXLSB + 1, "A")
' auf Zahlen in Spalte D prüfen
With wsXLSB
letzteZeileXLSB = .Cells(.Rows.Count, 4).End(xlUp).Row
Set rngBereich = .Range(.Cells(2, 4), .Cells(letzteZeileXLSB, 4))
boZähler = False
For Each rngZelle In rngBereich
If Not IsNumeric(rngZelle.Value) Then
boZähler = True
loZahl = Application.InputBox("Bitte eine Ganzzahl eingeben.", _
"Zahleneingabe", , , , , , 1)
If loZahl = 0 Then Exit Sub
rngZelle = loZahl
End If
Next rngZelle
If boZähler = False Then MsgBox "Nur numerische Werte vorhanden"
End With
End Sub
Gruß Werner
Anzeige
AW: Werte aus einer .csv in ein Datenblatt kopieren
05.02.2017 12:30:58
Mike
Hallo Werner,
das ist korrekt, vielen dank
Gruß Mike
AW: Danke für die Rückmeldung. o.w.T.
05.02.2017 12:39:33
Werner
AW: Danke für die Rückmeldung. o.w.T.
05.02.2017 13:09:09
Mike
Hallo Werner
der Code funktioniert, wäre es möglich unter dem Eingabefeld eine Information als MsgBox anzuzeigen ?
Die Information befindet sich immer in der zugehörigen Zeile wo der Wert nicht nummerisch ist, in der Spalte E und G.
Spalte G ist der Titel , somit kann ich feststellen zu welchen datensatz ich die Zahl eingeben mus.
Gruß Mike
AW: Danke für die Rückmeldung. o.w.T.
05.02.2017 15:22:06
Werner
Hallo Mike,
habe es jetzt mal in die InputBox mit integriert. Schau dir mal im Fenster der InputBox den Text über dem Eingabefeld an.
Sub datenkopieren()
' datenkopieren Makro
Dim letzteZeileXLSB As Integer
Dim letzteZeileCSV As Integer
Dim datXLSB As String
Dim datXLS As String
Dim datCSV As String
Dim heute As Date
Dim wbXLSB As Workbook
Dim wsXLSB As Worksheet
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim pfad As String
Dim zeile1 As Integer
Dim rngBereich As Range '##neu##
Dim rngZelle As Range '##neu##
Dim loZahl As Long '##neu##
Dim boZähler As Boolean '##neu##
heute = Date
datCSV = Format$(heute, "dd.mm.yyyy") & "_tagesbestellung.csv"
datXLSB = "Arbeitsdatei2017.xlsx"
pfad = "C:\Users\Mike\Documents\Arbeit\"
Set wbXLSB = Workbooks(datXLSB)
Set wsXLSB = wbXLSB.Worksheets("Datentabelle")
'1. Arbeitsmappe datCSV öffnen
If Dir(pfad & datCSV) = "" Then
MsgBox Prompt:="Datei """ & pfad & datCSV & """ existiert nicht!", _
Buttons:=vbCritical
Exit Sub
End If
On Error Resume Next
Workbooks(datXLS).Close SaveChanges:=False
On Error GoTo 0
Set wbCSV = Workbooks.Open(Filename:=pfad & datCSV)
Set wsCSV = wbCSV.Worksheets(1)
letzteZeileXLSB = wsXLSB.Cells(Rows.Count, 1).End(xlUp).Row
letzteZeileCSV = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
wsCSV.Range("A2:M2").Resize(letzteZeileCSV - 1).Copy _
Destination:=wsXLSB.Cells(letzteZeileXLSB + 1, "A")
' auf Zahlen in Spalte D prüfen
With wsXLSB
letzteZeileXLSB = .Cells(.Rows.Count, 4).End(xlUp).Row
Set rngBereich = .Range(.Cells(2, 4), .Cells(letzteZeileXLSB, 4))
boZähler = False
For Each rngZelle In rngBereich
If Not IsNumeric(rngZelle.Value) Then
boZähler = True
loZahl = Application.InputBox("Eingabe für: " & rngZelle.Offset(, 1).Value _
& "  " & rngZelle.Offset(, 3), "Zahleneingabe", , , , , , 1)
If loZahl = 0 Then Exit Sub
rngZelle = loZahl
End If
Next rngZelle
If boZähler = False Then MsgBox "Nur numerische Werte vorhanden"
End With
End Sub
Gruß Werner
Anzeige
AW: Danke für die Rückmeldung. o.w.T.
05.02.2017 18:00:33
Mike
Hallo Werner,
funktioniert perfekt, ein Umstand möchte ich noch beseitigen. Wenn ich die Zahl eingegeben habe Bsp. Artikelnummer fragt er zum gleichen Artikel diese nochmal ab, ist es möglich das nur eine Eingabe erforderlich ist.
So wie suchen und ersetzen ich suche über einen bestimmten begriff in der Spalte d und ersetze alle zellen auf einmal durch diese nummer.
Nochmals vielen Dank
Gruß mike

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige