Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1368to1372
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

Datenimport ohne überschreiben

Datenimport ohne überschreiben
14.07.2014 10:41:22
Knoof
Hallo,
Ich habe ein Problem, unzwar geht es um den Import von Datensätzen von einer Exceldatei in eine Zieldatei.
Das importieren bzw kopieren ist bisher kein Problem. Meine Zieldatei enthält eine UserForm1 mit dem Button "Datenimport".
Durch betätigen des Buttons kann ich eine Quelldatei auswählen und danach werden automatisch die datensätze in meine Zieldatei kopiert.
Das Problem besteht nun darin:
Der Datenimport der Quelldatei2 hat bereits einmal stattgefunden. nunr wurde die Quelldatei2 aber um einige Datensätze erweitert.
Um diese neuen Datensätze auch in meine Zieldatei zu bekommen wähle ich die Quelldatei2 erneut für den Datenimport aus.
Nun sollen aber nur die neuen (bzw. in der Zieldatei noch nicht vorhandenen) Datensätze importiert werden.
Ist es möglich quasi eine kontrolle durchzuführen welche datensätze bereits vorhanden sind und welche noch nicht und das diese dann hinzugefügt werden?
Oder gibt es eine alternative?
-> Jeder Datensatz enthält eine eindeutige ID, vieleicht ist das von NUtzen für die Lösung
Private Sub cmdimport_Click()
Dim QWB As Workbook, ZWB As Workbook
Dim QWS As Worksheet, ZWS As Worksheet
Dim ordner As Variant
'Wenn die Datei erst geöffnet werden muss
Set ZWB = ThisWorkbook                  ' Ziel, Workbook mit diesem Makro
Set ZWS = ZWB.ActiveSheet    ' Ziel
ordner = Application.GetOpenFilename("Manche Dateien (*.txt),*.txt,Alle Dateien,*.*")
Set QWB = Workbooks.Open(ordner)          ' Quelle, aus der die Tabelle41 kopiert werden soll
Set QWS = QWB.Worksheets("Sheet 1")   ' Quelle
QWS.Cells.Copy ZWS.Cells(1, 1)                ' oder before
QWB.Close          ' Wenn die Datei wieder geschlossen werden soll
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenimport ohne überschreiben
14.07.2014 12:25:14
Ralf
Hallo,
mit der ID ist das kein Problem.
Du musst irgendwie feststellen, wenn alles importiert oder nur upgedatet werden soll.
Nach dieser Entscheidung kannst du alle ID nacheinander abklappern und kontrollieren.
Eine For Each .. In .. Next Schleife in Verbindung mit Find für alle zu kontrollierende ID sollte genügen.
Gruß
Ralf

AW: Datenimport ohne überschreiben
14.07.2014 12:30:16
Knoof
Danke für die Antwort Ralf.
Ist es möglich das du mir einen Code vorbereitest?
Ich habe nicht sehr viel Kenntnisse in VBA und kann deinen vorschlag mit meinem Wissen nicht umsetzen.
Gruß,
Knoof

AW: Datenimport ohne überschreiben
14.07.2014 12:49:46
Ralf
... dateiaufruf...
annahme: qsh = quellsheet als worksheet deklariert
zsh = zielsheet als worksheet
ID steht in 1. Spalte

dim Zelle as Range
dim quRows as long
dim zuRows as long
dim suche as range
if msgbox("nur update?",vbyesno)=vbno then
'code für überschreiben
else
'code für update
uRows = qsh.usedrange.rows.count
for each zelle in qsh.columns(1)
set suche = zsh.columns(1).find(zelle,,xlvalues,xlwhole)
if suche is nothing then
'zeile wird ins zielsheet unten angefügt
zelle.entirerow.copy zsh.cells(zsh.usedrange.rows.count+1,1)
else
'schon drin
end if
next
end if
Gruß
Ralf

Anzeige
AW: Datenimport ohne überschreiben
14.07.2014 13:10:28
Knoof
Hallo Ralf,
Habe versucht es in meinen Code einzubringen, leider ohne erfolg.
Private Sub cmdimport_Click()
Dim Zelle As Range
Dim quRows As Long
Dim zuRows As Long
Dim suche As Range
If MsgBox("Nur Update?", vbYesNo) = vbNo Then
Dim QWB As Workbook, ZWB As Workbook
Dim qsh As Worksheet, zsh As Worksheet
Dim ordner As Variant
'Wenn die Datei erst geöffnet werden muss
Set ZWB = ThisWorkbook                  ' Ziel, Workbook mit diesem Makro
Set zsh = ZWB.ActiveSheet    ' Ziel
ordner = Application.GetOpenFilename("Manche Dateien (*.txt),*.txt,Alle Dateien,*.*")
Set QWB = Workbooks.Open(ordner)          ' Quelle, aus der die Tabelle41 kopiert werden soll
Set qsh = QWB.Worksheets("Sheet 1")   ' Quelle
qsh.Cells.Copy zsh.Cells(1, 1)                ' oder before
QWB.Close          ' Wenn die Datei wieder geschlossen werden soll
Else
'code für update
ordner = Application.GetOpenFilename("Manche Dateien (*.txt),*.txt,Alle Dateien,*.*")
Set QWB = Workbooks.Open(ordner)
Set qsh = QWB.Worksheets("Sheet 1")
quRows = qsh.UsedRange.Rows.Count
For Each Zelle In qsh.Columns(1)
Set suche = zsh.Columns(1).Find(Zelle, , xlValues, xlWhole)
If suche Is Nothing Then
'zeile wird ins zielsheet unten angefügt
Zelle.EntireRow.Copy zsh.Cells(zsh.UsedRange.Rows.Count + 1, 1)
End If
Next
End If
End Sub
Objektvariable oder With-Blockvariable nicht festgelegt:
Set suche = zsh.Columns(1).Find(Zelle, , xlValues, xlWhole)
hab ichs richtig eingebaut?`Wo ist in deinem Code die Auswahl der Quelldatei aus der das update gezogen werden soll?
Sorry :/

Anzeige
AW: Datenimport ohne überschreiben
14.07.2014 13:33:35
Ralf

Private Sub cmdimport_Click()
Dim Zelle As Range
Dim quRows As Long
Dim zuRows As Long
Dim suche As Range
Dim QWB As Workbook, ZWB As Workbook
Dim qsh As Worksheet, zsh As Worksheet
Dim ordner As Variant
'Wenn die Datei erst geöffnet werden muss
Set ZWB = ThisWorkbook                  ' Ziel, Workbook mit diesem Makro
Set zsh = ZWB.ActiveSheet    ' Ziel
ordner = Application.GetOpenFilename("Manche Dateien (*.txt),*.txt,Alle Dateien,*.*")
Set QWB = Workbooks.Open(ordner)          ' Quelle, aus der die Tabelle41 kopiert werden soll
Set qsh = QWB.Worksheets("Sheet 1")   ' Quelle
If MsgBox("Nur Update?", vbYesNo) = vbNo Then
qsh.Cells.Copy zsh.Cells(1, 1)                ' oder before
Else
'code für update
quRows = qsh.UsedRange.Rows.Count
For Each Zelle In qsh.Range(qsh.Cells(1, 1), qsh.Cells(quRows, 1))
Set suche = zsh.Columns(1).Find(Zelle, , xlValues, xlWhole)
If suche Is Nothing Then
'zeile wird ins zielsheet unten angefügt
Zelle.EntireRow.Copy zsh.Cells(zsh.UsedRange.Rows.Count + 1, 1)
End If
Next
End If
QWB.Close          ' Wenn die Datei wieder geschlossen werden soll
End Sub

Anzeige
Yess! Danke dir !
14.07.2014 13:38:34
Knoof
klappt!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige