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

VBA Import über Primärschlüssel

VBA Import über Primärschlüssel
20.04.2016 13:42:54
Jonas
Hallo zusammen,
ich habe ein kleines Problem und ich hoffe ihr könnt mir helfen.
Ausgangssituation:
Ich habe zwei Exceldatein (Tabelle1 und Tabelle2) jetzt soll der Inhalt aus Tabelle2 via Buttonklick in Tabelle1 importiert werden. Dies soll jedoch nur passieren, wenn der Primärschlüssel in beiden Tabellen übereinstimmt. Falls dies nicht der Fall ist und ein Primärschlüssel nur in Tablle2 aber nicht in Tabelle1 vorhanden ist soll ein neuer Datensatz in Tabelle1 angelegt und farblich makiert werden.
Beispiel
Tabelle1 (Name; Vorname; ID)
(Müller; Hans; 1)
Tabelle2 (Name; Vorname; ID)
(Müller; Hans; 1)
(Peer; Timo; 2)
Die ID soll den Primärschlüssel darstellen und via Buttenklick sollen nun die noch nicht vorhanden Werte in Tabelle1 eingetragen werden.
Vielen Dank euch schon einmal und schöne Grüße.

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Import über Primärschlüssel
20.04.2016 14:25:09
ChrisL
Hi Jonas
Sub t()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, letzteZeile As Long
Set WS1 = Worksheets("Tabelle1")
Set WS2 = Worksheets("Tabelle2")
For iZeile = 2 To WS2.Cells(WS2.Rows.Count, 3).End(xlUp).Row
If WorksheetFunction.CountIf(WS1.Columns(3), WS2.Cells(iZeile, 3)) = 0 Then
letzteZeile = WS1.Cells(WS1.Rows.Count, 3).End(xlUp).Row + 1
WS2.Rows(iZeile).Copy WS1.Rows(letzteZeile)
With WS1.Rows(letzteZeile).Interior
.Pattern = xlSolid
.Color = 255
End With
Else
' Datensatz schon vorhanden, folglich muss auch nichts übernommen werden
End If
Next iZeile
End Sub

cu
Chris

Anzeige
AW: VBA Import über Primärschlüssel
21.04.2016 10:27:31
Jonas
Hay Chris,
vielen Dank schon einmal.
Leider habe ich noch eine Erweiterung, die mir momentan noch Schwierigkeiten bereitet :D
Und zwar möchte ich wenn die Primärschlüssel in Tabelle1 und Tabelle2 gleich sind die Datensätze sich aber unterscheiden, dass die Datensätze aus Tabelle1 durch die Datensätze aus Tabelle2 erstezt werden. Also sozusagen aktualisiert werden.
Beispiel Ausgangssituation:
Tabelle1 (Name; Vorname; ID)
(Müller; Hans; 1)
Tabelle2 (Name; Vorname; ID)
(Peer; Timo; 1)
Wunsch nach Betätigung des Buttons:
Tabelle1 (Name; Vorname; ID)
(Peer; Timo; 1)
Tabelle2 (Name; Vorname; ID)
(Peer; Timo; 1)
Ich hoffe du kannst mir nochmal helfen.
Mein erster Ansatz war es dies in der Else-Schleife zu realisieren aber leider bin ich gescheitert :D
Vielen Dank und Gruße,
Jonas

Anzeige
AW: VBA Import über Primärschlüssel
21.04.2016 11:03:57
ChrisL
hi Jonas
Sub t()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, letzteZeile As Long
Set WS1 = Worksheets("Tabelle1")
Set WS2 = Worksheets("Tabelle2")
For iZeile = 2 To WS2.Cells(WS2.Rows.Count, 3).End(xlUp).Row
If WorksheetFunction.CountIf(WS1.Columns(3), WS2.Cells(iZeile, 3)) = 0 Then
letzteZeile = WS1.Cells(WS1.Rows.Count, 3).End(xlUp).Row + 1
WS2.Rows(iZeile).Copy WS1.Rows(letzteZeile)
With WS1.Rows(letzteZeile).Interior
.Pattern = xlSolid
.Color = 255
End With
Else
letzteZeile = Application.Match(WS2.Cells(iZeile, 3), WS1.Columns(3), 0)
WS2.Rows(iZeile).Copy WS1.Rows(letzteZeile)
End If
Next iZeile
End Sub

cu
Chris

Anzeige
AW: VBA Import über Primärschlüssel
25.04.2016 11:04:32
Jonas
Danke dir !
Das hat mir sehr weitergeholfen.
Zwei kurze Fragen hätte ich jedoch noch.
Und zwar wie kann ich es umsetzten das der import sich nur auf bestimmte spalten bezieht also z.B. auf spalte 1 und 3 und nicht auf das komplette Excel-Sheet und wie ist es möglich, das wenn ein Datensatz aktualisiert wurde diesen zu färben?
Vielen dank und Gruß,
Jonas

AW: VBA Import über Primärschlüssel
25.04.2016 12:45:35
ChrisL
Hi Jonas
Bitte konkret und nicht "zum Beispiel". Lade eine Beispieldatei wo ersichtlich ist, was genau verglichen und eingefärbt werden soll.
cu
Chris

AW: VBA Import über Primärschlüssel
25.04.2016 13:46:27
Jonas
Hay Chris,
anbei nun meine beiden Testtabellen (https://www.herber.de/bbs/user/105217.zip).
Wenn du nun den import-Button betätigst, ändert sich der Wert in A3, der Wert in J4 wird entfernt und die fehlenden Werte werden hinzugefügt und farblich makiert.
Meine anforderung wäre nun, dass wenn der import Button aktiviert wird, nur die Spalten A und Spalte B aktualisiert wird.Also werte die in andern Tabellenspalten vorhanden sind trotzdem bestehen bleiben. Und falls möglich, da sich ja auch A3 aktualisiert dies farblich zu hinterlegen.
Vielen Dank schon einmal :)
Gruß Jonas

Anzeige
AW: VBA Import über Primärschlüssel
25.04.2016 15:43:27
ChrisL
Hi Jonas
Sorry, aber der Download von ZIP-Dateien ist bei mir leider gesperrt und kann ich nicht beeinflussen. Müsstest darum die XL-Dateien einzeln hochladen.
cu
Chris

AW: VBA Import über Primärschlüssel
25.04.2016 16:28:45
ChrisL
Hi Jonas
Anhand der Beispieldatei so:
Private Sub CommandButton1_Click()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, letzteZeile As Long
Set WS1 = Workbooks("Importtest_1.xlsm").Worksheets("Sheet1")
Set WS2 = Workbooks("Importtest_2.xlsx").Worksheets("Sheet1")
For iZeile = 1 To WS2.Cells(WS2.Rows.Count, 3).End(xlUp).Row
If WorksheetFunction.CountIf(WS1.Columns(3), WS2.Cells(iZeile, 3)) = 0 Then
letzteZeile = WS1.Cells(WS1.Rows.Count, 3).End(xlUp).Row + 1
WS2.Range(WS2.Cells(iZeile, 1), WS2.Cells(iZeile, 3)).Copy WS1.Cells(letzteZeile, 1)
With WS1.Range(WS1.Cells(letzteZeile, 1), WS1.Cells(letzteZeile, 3)).Interior
.Pattern = xlSolid
.Color = 255
End With
Else
letzteZeile = Application.Match(WS2.Cells(iZeile, 3), WS1.Columns(3), 0)
If WS1.Cells(letzteZeile, 1)  WS2.Cells(iZeile, 1) Or _
WS1.Cells(letzteZeile, 2)  WS2.Cells(iZeile, 2) Then
WS2.Range(WS2.Cells(iZeile, 1), WS2.Cells(iZeile, 3)).Copy WS1.Cells(letzteZeile, 1) _
With WS1.Range(WS1.Cells(letzteZeile, 1), WS1.Cells(letzteZeile, 3)).Interior
.Pattern = xlSolid
.Color = 255
End With
End If
End If
Next iZeile
End Sub

cu
Chris

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige