Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Datenimport ohne überschreiben

Betrifft: Datenimport ohne überschreiben von: Knoof
Geschrieben am: 20.08.2014 09:45:23

Hallo,

Ich habe vor längerer Zeit mal den folgenden Code bekommen.
Der funktioniert eigentlich ganz gut...

Wenn in meiner Zieldatei schon Datensätze vorhanden sind, fügt er die neuen Datensätze aus meiner Queldatei auch unten an.
Wenn meine Zieldatei allerdings noch keine Datensätze enthält und ich aktualisieren drücke, dann werden die Datensätze einfach ganz weit unten in Zeile 47 oder so eingefügt und die oberen Zeilen bleiben leer.

Ich weiß beim besten willen nicht woran das liegen kann.

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
Ebenso sollen die Überschriften der Spalten nicht überschrieben werden, es sollen lediglich Datensätze die noch nicht vorhanden sind einfach in mein Zielsheet eingefügt werden, und wenn mien Zielsheet leer ist(nur überschriften), dann sollen halt alle eingefügt werden.

Bitte um Hilfe!

Gruß,
Knoof

  

Betrifft: AW: Datenimport ohne überschreiben von: Luschi
Geschrieben am: 20.08.2014 10:24:41

Hallo Knoof,

ich wundere mich schon, daß Du diese Frage erneut stellst, ohne auf meinen Tipp zum gleichen Problem zu antworten!

https://www.herber.de/forum/messages/1376429.html

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Datenimport ohne überschreiben von: Knoof
Geschrieben am: 20.08.2014 11:00:20

Sorry Luschi wusste nicht wie ich auf den beitrag zurück greifen konnte um darauf zu antworten, habe länger nicht mehr ins forum geguckt.

Ich verstehe deinen Code zwar, aber leider konnte ich ihn nicht so in meinen Code einbauen damit es funktioniert, zumindest habe ich nicht das erreicht was ich wollte.

Mit deinem Code selektiert er nicht diejenigen Datensätze aus, die schon vorhanden sind.

Ich danke dir schonmal für deine Mühe,

Gruß
Knoof


  

Betrifft: AW: Datenimport ohne überschreiben von: Rolf.dW
Geschrieben am: 20.08.2014 10:26:05

Moin Knoof,

1. Die Anweisung "UsedRange.Rows.Count" führt immer dann zu solchen Fehlern, wenn unterhalb der Daten - aus welchen Gründen auch immer - irgendwann Einträge vorhanden waren, die zwar "Entf" wurden (, von excel aber immer noch als belegt angesehen werden). Du musst diesen Bereich zunächst komplett löschen.
Soll heißen: Erste Leerzelle unterhalb deiner Daten anklicken, anschließend den Bereich mit Shift+Strg+ENDE auswählen, mit Strg+Minuszeichen löschen und anschließend speichern. Mit Strg+ENDE kannst du prüfen, ob alles geklappt hat.

2. Mit "qsh.Cells.Copy" wird das gesamte Tabellenblatt (einschließlich Überschriften) kopiert. Das musst du deinen Vorstellungen entsprechend ändern, indem du z.B. den Copy-Bereich als Range definierst oder ihm per VBA einen Bereichsnamen verpasst.

Gruß, Rolf


  

Betrifft: AW: Datenimport ohne überschreiben von: Knoof
Geschrieben am: 20.08.2014 14:02:22

Dankesehr! das wusste ich noch nicht :)