Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Daten von extern Importieren
#1
Hallo liebes Forum

Mein folgendes Problem
Habe nun 2 Arbeitsmappen Quelle und Ziel
Nun möchte ich die Daten der Quelle (DB-Intelligente tabelle beginn D12) in die Ziel (DB-Intelligente tabelle beginn D12) bringen
2 auswahlkriterien stehen zur verfügung Quelle (DB) - Datum und Kunde und für die Ziel (DB) Datum und Kunde
Nun soll wenn ich den Button Import drücke die daten von Quelle (DB) in die Ziel (DB) kopiert werden auf die jeweiligen spalte (jede Spalte vom der Quelle wird nicht benötigt)
Im Vorfeld soll aber überprüft werden ob die Daten schon in der Ziel (DB) vorhanden sind und nur mehr die die neu einträge rüberkopieren


Habe es mal probiert aber dabei ist nicht das gewünschte ergebniss rausgekommen
Code:
Sub Arbeitsmappe()

Dim lngZMax As Long
Dim rngBereichId As Range
Dim sPfad As String
Dim Zeile As Long
Dim wbQuelle As Workbook
Dim s As Long
Dim x As Long
Dim y As Long
Dim z As Long
x = 2
s = 0


Application.ScreenUpdating = False
Application.DisplayAlerts = False

sPfad = "C:\Users\Press\OneDrive\Desktop\Pivotberechnung.xlsm"

If Dir(sPfad) <> "" Then

    Set wbQuelle = Workbooks.Open(sPfad)
   
With wbQuelle

    .Range("D12:Y").Copy ThisWorkbook.Worksheets(1).Range("D12")
    lngZMax = .Cells(.Rows.Count, 2).End(xlUp).Row
    Set rngBereichId = ThisWorkbook.Worksheets(1).Range("D12:Y" & ThisWorkbook.Worksheets(1).Cells(.Rows.Count, 1).End(xlUp).Row)
   
    ThisWorkbook.Worksheets(1).Range("D12:Y" & .Cells(.Rows.Count, 2).End(xlUp).Row).ClearContents
    For w = 2 To lngZMax
    If Application.WorksheetFunction.CountIf(rngBereichId, wbQuelle.Cells(w, 1)) = 0 Then
    ThisWorkbook.Worksheets(1).Cells(w, 1).EntireRow.Insert
    .Cells(w, 2).EntireRow.Copy ThisWorkbook.Worksheets(1).Cells(x, 1)
    x = x + 1
    ElseIf ThisWorkbook.Worksheets(1).Cells(w, 2).Value <> .Cells(w, 2).Value Then
    .Cells(w, 2).EntireRow.Copy ThisWorkbook.Worksheets(1).Cells(x, 1)
    x = x + 1
ElseIf ThisWorkbook.Worksheets(1).Cells(w, 2).Value = .Cells(w, 2).Value And ThisWorkbook.Worksheets(1).Cells(w, 5).Value <> .Cells(w, 5).Value Then
    For i = 1 To Len(.Cells(w, 5))
   
    If Mid(ThisWorkbook.Worksheets(1).Cells(w, 5), i, 1) <> Mid(.Cells(w, 5), i, 1) Then
    .Cells(w, 5).Characters(Start:=i, Length:=i).Font.Color = RGB(255, 0, 0)
   
End If
Next i

    For z = Len(.Cells(w, 5)) To 1 Step -1
    If Mid(.Cells(w, 5), z, 1) = Mid(ThisWorkbook.Worksheets(1).Cells(w, 5), Len(ThisWorkbook.Worksheets(1).Cells(w, 5)) - s, 1) Then
    .Cells(w, 5).Characters(Start:=z, Length:=z).Font.Color = RGB(10, 0, 0)
   
Else
GoTo sprung
End If

    s = s + 1
   
Next z

sprung:
    .Cells(w, 5).EntireRow.Copy ThisWorkbook.Worksheets(1).Range("D" & x)
    x = x + 1
   
End If

    s = 0
   
Next w

End With

With ThisWorkbook.Worksheets(1)

    For y = .Cells(.Rows.Count, 2).End(xlUp).Row To 1 Step -1
    If IsEmpty(.Cells(y, 1).Value) Then
    .Cells(y, 1).EntireRow.Delete
   
End If

Next y

End With

    wbQuelle.Close SaveChanges:=False
   
End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True

Call Nav_DB

End Sub
Danke für eure Hilfe
Antworten Top
#2
Hi Lea,

wird langsam Zeit, dass Du Dor mal eine aktuelle Version mit Power Query zulegst. Bei 2010 musst Du noch das AddIn DataExplorer installieren und einbinden und kannst PQ dann über das gleichnamige Menü aufrufen. Da braucht es auch kein VBA mehr.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Hallöchen,

1)
Mich wundert, dass da überhaupt was rausgekommen sein soll. Bereits hier
Code:
.Range("D12:Y").Copy ThisWorkbook.Worksheets(1).Range("D12")
sollte es nicht weitergehen. Da fehlt was ...

2)
Eine weitere, aber sicher etwas kompliziertere Alternative wären Abfragen per ADO, siehe dazu
online-excel.de - ADO und Excel
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Guten Morgen Schauan

Teste gerade die Power Query

Werde mich dann mal dem ADO widmen

Was ist deine Meinung was ist besser ADO oder Query

Bei welcher vorgehensart wird die Liste nicht all zu stark belastet da ich ca 200tsd einträge habe und ca 20 Leute drauf zugreifen

Lg LexLea
Antworten Top
#5
Hi Lea,

was besser ist, kann man so nicht sagen. Aber ADO muss programmiert werden. Das heißt, Du musst Dich intensiv damit beschäftigen. PQ erledigt vieles per Mausklick. Also, wenn Du von ADO noch nie was gehört hast und keine großen Extrawünsche als nur Datenimport hast, dann ist PQ die bessere Wahl. Gibt auch gute Tutorials dazu auf Youtube...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#6
Hallo auch von mir,

ich bin ja ein Verfechter von PowerQuery und finde das Tool ist im Zusammenhang mit PowerPivot ein Gamechanger und bringt Excel meilenweit nach vorn im Auswertegeschäft, aber in diesem Fall sehe ich einen Fallstrick, bei dem PQ an eine Grenze kommt:
Wenn ich den Ablauf richtig verstanden habe, importierst du Daten aus einer zentralen Quelle und willst sie anschließend in der Zieldatei ergänzen. Und das ist das Problem. Wenn du die Daten in der Zieldatei ergänzt hast, merkt sich Excel zwar die Inhalte der zusätzlichen Spalten, allerdings wird kein Bezug zum Datensatz hergestellt. Wenn also in der Quelle Daten hinzukommen, die möglicherweise auch noch vor den bereits vorhandenen Daten liegen, verrutschen die Ergänzungen.
Beispiel:
Code:
Quelle
ID|Bezeichnung
 3|Hund
 4|Katze
 5|Maus

-> wird importiert in Ziel und ergänzt
Ziel
ID|Bezeichnung|Vorname
 3|Hund       |Bello
 4|Katze      |Minka
 5|Maus       |Mickey


-> Quelle wird ergänzt
Quelle
ID|Bezeichnung
 2|Bär
 3|Hund
 4|Katze
 5|Maus

-> Ziel wird aktualisiert
Ziel
ID|Bezeichnung|Vorname
 2|Bär        |Bello
 3|Hund       |Minka
 4|Katze      |Mickey
 5|Maus       |


-> Die Namen sind verrutscht und lassen sich nicht mehr zuordnen.

Die einzige Möglichkeit, die mir einfällt, um das zu verhindern ist es, die Zusatzinformationen in eine einzelne Tabelle auszulagern und über die ID eindeutig zu verknüpfen.

Viele Grüße
derHöpp
[-] Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:
  • LexLea
Antworten Top
#7
Hallöchen,

der Punkt ist eben, dass in der Quelle die Reihenfolge mit dem Ziel übereinstimmen sollte, damit nix schief geht.
Wenn Du den Bären hinten aufbindest Smile passt es. Dir darf aber auch die Katze kein Leben verlieren ...

Wenn Du in Analogie zum Vorschlag in Quelle und Ziel mit ID's arbeitest, diese gleich sortiert lässt und bei Entfall die ID entweder in beiden Tabellen behältst oder in beiden vor der Aktualisierung entfernst, und nur die zugehörigen Daten löschst, passt es auch.
.      \\\|///      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:
  • LexLea
Antworten Top
#8
Wenn aus der Quelle die Datum-/Kundenkombinationen an DB angefügt (Nur Spalten, die es in noch DB gibt?) werden sollen, dann geht das mit PQ ganz einfach.

1. Query - Quelle lesen > nicht benötigte Spalten löschen > als Verbindung speichern.

2. Query - Daten > Daten abrufen > Abfragen kombinieren > anfügen
Erste Tabelle = DB
Zweite Tabelle = Verbindung aus erster Abfrage

Dubletten lösschen ausgeben.

Hier muss nur vorher geklärt werden, was das Gegenstück der Spalte "Datum" aus der Quelle in der Tabelle DB ist.

Und nach dem Esten Durchlauf, muss in der 2. Abfrage der Name der Quelltabelle auf den Namen der erzeugten Tabelle geändert werden.

Die neuen Datensätze enthalten dann rund 80 Spalten, zu denen es noch keine Daten gibt.
[-] Folgende(r) 2 Nutzer sagen Danke an ws-53 für diesen Beitrag:
  • LexLea, wisch
Antworten Top
#9
Hallo und Danke

Habe mich heute den Ganzen Tag mit der Query beschäftig
Habe nun den DatenImport vom Ordner (aufbereitet gefiltert usw usw)
Dann die Datenbank auch einlesen lassen
dann eine Abfrage mit kombinieren die beide vergleicht und mir die Daten zurückgibt die noch nicht in der Datenbank sind
aber nun besteht das Problem das ich die neuen daten nicht an letzter zeile einfügen kann

Lg LexLea


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#10
..'ne Thumbnail anzuhängen, deren Deutlichkeit beim Vergrößern nicht besser wird, ist wenig hilfreich.


Zitat:aber nun besteht das Problem das ich die neuen daten nicht an letzter zeile einfügen kann


Wozu willst Du was anhängen und vergleichen? Einfach die aufbereitete und gefilterte Abfrage aktualisieren, schon hast Du die neuen Datensätze mit dabei...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top


Gehe zu:


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