Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
372to376
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
372to376
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: 2 Dateien abgleichen und gleiche DS löschen

VBA: 2 Dateien abgleichen und gleiche DS löschen
29.01.2004 14:44:37
Joachim
Meine Suche hier im Forum war leider erfolglos:
Habe 2 Excel-Dateien (müssen 2 sein) mit je 1 Spalte Telefonnummern: tblTelefonnummern und tblTabunummern.
Möchte beide Dateien nun per VBA so abgleichen, dass alle Nummern, die sich in der tblTabunummern befinden, aus der tblTelefonnummern gelöscht werden.
Wenn mir hier jemand weiterhelfen kann - schon mal vielen, vieeelen Dank!

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: 2 Dateien abgleichen und gleiche DS löschen
29.01.2004 16:15:52
Roland Hochhäuser
Hallo Joachim,
- wie heißen die beiden Dateien,
- in welchem Arbeitsblatt der Mappen stehen die Telefonnummern und
- sind die Telefonnummern in beiden Tabellen gleich strukturiert (oder etwa in einer Tabelle nach Vor- und Einwahl getrennt?)
Gruß
Roland
VBA: 2 Dateien abgleichen und gleiche DS löschen
29.01.2004 16:40:08
Joachim
Hi Roland!
Die erste Datei heisst "empfaengerliste.xls" und die zweite "sperrliste.xls". In der ersten Datei gibt es mehrere Tabellenblätter, die mit Jahreszahlen benannt sind (z.B. "2003", "2004" etc.) Wäre schön, wenn ich den Abgleich von jedem Tabellblatt aus für genau dieses Tabellenblatt machen könnte. In der zweiten Datei gibt es nur das 1. Tabellenblatt mit dem Namen "sperrnummern". Zur dritten Frage: In beiden Dateien sind die Nummern gleich strukturiert (Vorwahl und Rufnummer ohne Leer- und Sonderzeichen hintereinander weg).
Gruss Joachim
Anzeige
AW: VBA: 2 Dateien abgleichen und gleiche DS löschen
29.01.2004 17:52:40
Roland Hochhäuser
OK, soweit klar . . . aber noch eine "Sicherheitsabfrage"
. . .wenn ich den Abgleich von jedem Tabellblatt aus für genau dieses Tabellenblatt machen könnte (???). . .
- willst du nun jedes Blatt der empfaengerliste.xls mit dem Blatt der sperrliste.xls vergleichen und bei Übereinstimmung den Datensatz in jeweiligen Blatt der Empfängerliste ohne Rücksicht auf Verluste löschen oder
- willst du zunächst das Blatt der empfaengerliste.xls auswählen können, mit dem die Nummern der sperrliste.xls verglichen werden und nur im ausgewählten Blatt die übereinstimmenden Datensätze löschen oder
- willst du die Blätter der empfaengerliste.xls untereinander vergleichen (und was soll dann gelöscht bzw. erhalten werden?)
Ist es weiter richtig, wenn ich annehme, dass in allen Blättern beider Mappen die Telefonnummern immer nur in Spalte A untereinander stehen?
Gruß
Roland
Anzeige
. fast vergessen
29.01.2004 17:56:23
Roland Hochhäuser
. . . können in den Blättern die Nummern mehrfach vorkommen (also in Blatt 1 z.B. 0304711 dreimal)?
AW: . fast vergessen
29.01.2004 18:26:15
Joachim
Kann passieren, habe hierfür aber schon einen Dublettenabgleich gefunden.
auch fast vergessen
29.01.2004 18:33:36
Joachim
Richtig: Die Nummern stehen in beiden Mappen immer in Apalte A untereinander.
VBA: 2 Dateien abgleichen und gleiche DS löschen
29.01.2004 18:08:34
Joachim
Naja, zunächst würde mir der erste Fall reichen: Jedes Tabellenblatt der "empfaengerliste.xls " mit dem Tabellenblatt der "sperrliste.xls" abgleichen und übereinstimmende Datensätze im jeweiligen Blatt der Empfängerliste löschen (Schön wäre vielleicht noch eine Meldung à la "Es wurden x Datensätze entfernt.")
Wenn ich in VB dann mal etwas fitter bin, werd ich Deine 2. Variante mit Auswahl der Tabellblätter angehen. Ist natürlich schöner...
Die dritte Variante (Tabellenblätter in "empfaengerliste.xls" untereinander vergleichen) ist für mich nicht von Bedeutung.
Hoffe, du kannst mir einen guten Tipp geben. Gruss Joachim
Anzeige
AW: VBA: 2 Dateien abgleichen und gleiche DS löschen
30.01.2004 00:19:03
Roland Hochhäuser
Hallo Joachim,
dann dürfte das deine Bedürfnisse abdecken:
Option Explicit

Sub NummernVergleichenUndLöschen()
Dim Blatt As Integer, i As Integer, j As Integer, k As Integer, l As Integer
Dim ws As Worksheet, Quelle As Worksheet, Ziel As Workbook
Set Quelle = Workbooks("sperrliste.xls").Worksheets(1)
Set Ziel = Workbooks("empfaengerliste.xls")
For Blatt = 1 To Ziel.Sheets.Count
If MsgBox("Sollen aus dem Blatt ""empfaengerliste"" " & Ziel.Sheets(Blatt).Name & " doppelte Nummern gelöscht werden?", vbYesNo) = 6 Then
Set ws = Workbooks("empfaengerliste.xls").Worksheets(Blatt)
k = 0
For i = ws.Range("A65536").End(xlUp).Row To 1 Step -1
For j = Ziel.Worksheets(Blatt).Range("A65536").End(xlUp).Row To 1 Step -1
If Ziel.Worksheets(Blatt).Range("A" & j).Value = Quelle.Range("A" & i).Value Then
Ziel.Worksheets(Blatt).Range("A" & j).ClearContents
k = k + 1
Else
End If
Next j
Next i
End If
MsgBox k & " Nummern wurden in Blatt " & Ziel.Sheets(Blatt).Name & " gelöscht."
l = l + k
Next Blatt
MsgBox "Insgesamt " & l & " Nummern wurden aus " & Ziel.Sheets.Count & " Blättern gelöscht"
Set Ziel = Nothing
Set Quelle = Nothing
Set ws = Nothing
End Sub

Gruß
Roland
Anzeige
Danke, danke!
30.01.2004 10:42:04
Joachim
Hi Roland!
Vielen Dank für den Code. Hab erst mal ein paar Kurztests durchgeführt: funktioniert bestens. Hier ein paar Dinge, die mir aufgefallen sind:
- Hatte am Anfang nur die "empfaengerliste.xls" geöffnet und bekam einen Laufzeitfehler. Nachdem auch die "sperrliste.xls" geöffnet war, war alles ok. Könnte man ja sicher in den Code einbauen.
- Wenn ich den Abgleich mehrmals hintereinander durchführe (nur zum Testen) und zwischendurch noch Daten verändere, kommt es manchmal zu Fehlern (Nummern aus der Sperrliste werden nicht mehr gelöscht). Weiss nicht woran das liegen kann... Muss noch genauer Testen... Ist aber im Grunde kein Problem, da ich den Abgleich eh nur einmal pro Tabellblatt durchführe.
- Nach dem Löschen bleibt ein leeres Feld übrig. Gibt es eine (einfache) Möglichkeit, dass der komplette Datensatz gelöscht und das Tabellenblatt automatisch neu durchnummeriert wird?
- Wahrscheinlich werd' ich den Abgleich doch immer nur für das aktive Tabellenblatt der "empfaengerliste.xls" durchführen. Könntest Du mir sagen, wie ich den Code dafür verändern müsste?
Hast mir super weitergeholfen.
Gruss Joachim
Anzeige
Dann eben so:
30.01.2004 12:09:52
Roland Hochhäuser
Hallo Joachim,
freut mich, dass es funktioniert. Nun zu deinen Anmerkungen:
- Hatte am Anfang nur die "empfaengerliste.xls" geöffnet und bekam einen Laufzeitfehler. Nachdem auch die "sperrliste.xls" geöffnet war, war alles ok. Könnte man ja sicher in den Code einbauen.
Klar, da bieten sich 2 Möglichkeiten a) einen Benachrichtigung, dass noch eine Datei geöffnet werden muss b) eine Routine, die die 2. Datei öffnet. Wenn du b) willst, müsstest du mir verraten, ob beide Dateien im gleichen Verzeichnis liegen; wenn nicht, brauche ich den vollständigen Pfad der 2. Datei
- Wenn ich den Abgleich mehrmals hintereinander durchführe (nur zum Testen) und zwischendurch noch Daten verändere, kommt es manchmal zu Fehlern (Nummern aus der Sperrliste werden nicht mehr gelöscht). Weiss nicht woran das liegen kann...
Das kann ich beim besten Willen nicht nachvollziehen; gibt es eine Fehlermeldung und bist du dir sicher, dass du die Daten so geändert hast, dass sie übereinstimmen müssten?
- Nach dem Löschen bleibt ein leeres Feld übrig. Gibt es eine (einfache) Möglichkeit, dass der komplette Datensatz gelöscht und das Tabellenblatt automatisch neu durchnummeriert wird?
siehe Code
- Meldungsfehler
siehe Code
neuer Code:
Option Explicit

Sub NummernVergleichenUndLöschen()
Dim Blatt As Integer, i As Integer, j As Integer, k As Integer, l As Integer
Dim ws As Worksheet, Quelle As Worksheet, Ziel As Workbook
Set Quelle = Workbooks("sperrliste.xls").Worksheets(1)
Set Ziel = Workbooks("empfaengerliste.xls")
For Blatt = 1 To Ziel.Sheets.Count
If MsgBox("Sollen aus dem Blatt ""empfaengerliste"" " & Ziel.Sheets(Blatt).Name & " doppelte Nummern gelöscht werden?", vbYesNo) = 6 Then
Set ws = Workbooks("empfaengerliste.xls").Worksheets(Blatt)
k = 0
For i = ws.Range("A65536").End(xlUp).Row To 1 Step -1
For j = Ziel.Worksheets(Blatt).Range("A65536").End(xlUp).Row To 1 Step -1
If Ziel.Worksheets(Blatt).Range("A" & j).Value = Quelle.Range("A" & i).Value Then
Ziel.Worksheets(Blatt).Rows(j).Delete
k = k + 1
Else
End If
Next j
Next i
MsgBox k & " Nummern wurden in Blatt " & Ziel.Sheets(Blatt).Name & " gelöscht."
l = l + k
End If
Next Blatt
MsgBox "Insgesamt " & l & " Nummern wurden aus " & Ziel.Sheets.Count & " Blättern gelöscht"
Set Ziel = Nothing
Set Quelle = Nothing
Set ws = Nothing
End Sub

Gruß
Roland
Anzeige
Prima!
30.01.2004 13:52:27
Joachim
Hallo Roland,
läuft einwandfrei - hab auch keine Fehlerchen mehr entdeckt.
Die Routine zum Öffnen der Sperrliste wäre schön - beide Dateien liegen im gleichen Ordner. Kurz nochmal die Frage: Was müsste ich ändern, um den Abgleich immer nur für das aktive Tabellenblatt zu machen? Nochmals vielen Dank für Deine Hilfe!
Gruss Joachim
AW: Prima!
30.01.2004 19:23:50
Roland Hochhäuser
Hallo Joachim,
danach ist für mich Wochenende!
Option Explicit

Sub NummernVergleichenUndLöschen()
Dim Blatt As Integer, i As Integer, j As Integer, k As Integer, l As Integer
Dim ws As Worksheet, Quelle As Worksheet, Ziel As Workbook, strfile As String
strfile = ThisWorkbook.Path & "\empfaengerliste.xls"
On Error Resume Next
Workbooks.Open (strfile)
Set Quelle = Workbooks("sperrliste.xls").Worksheets(1)
Set Ziel = Workbooks("empfaengerliste.xls")
For Blatt = 1 To Ziel.Sheets.Count
If MsgBox("Sollen aus dem Blatt ""empfaengerliste"" " & Ziel.Sheets(Blatt).Name & " doppelte Nummern gelöscht werden?", vbYesNo) = 6 Then
Set ws = Workbooks("empfaengerliste.xls").Worksheets(Blatt)
k = 0
For i = ws.Range("A65536").End(xlUp).Row To 1 Step -1
For j = Ziel.Worksheets(Blatt).Range("A65536").End(xlUp).Row To 1 Step -1
If Ziel.Worksheets(Blatt).Range("A" & j).Value = Quelle.Range("A" & i).Value Then
Ziel.Worksheets(Blatt).Rows(j).Delete
k = k + 1
Else
End If
Next j
Next i
MsgBox k & " Nummern wurden in Blatt " & Ziel.Sheets(Blatt).Name & " gelöscht."
l = l + k
End If
Next Blatt
MsgBox "Insgesamt " & l & " Nummern wurden aus " & Ziel.Sheets.Count & " Blättern gelöscht"
Set Ziel = Nothing
Set Quelle = Nothing
Set ws = Nothing
End Sub

. . . Was müsste ich ändern, um den Abgleich immer nur für das aktive Tabellenblatt zu machen
Nimm die erste For-Next-Schleife raus, dann werden die Blätter nicht mehr durchgegangen.
Ein schönes Wochenende
Roland
Anzeige
Danke und schönes Wochenende!
30.01.2004 21:26:17
Joachim
Hi Roland,
möchte mich für Deine Hilfe (und Deine Ausdauer!) bedanken.
Hätte nicht gedacht, dass ich bei meiner ersten Frage hier
im Forum so schnell eine Lösung bekomme. Meine ebay-Bewertung
würde lauten: "Schnell, freundlich, kompetent. Und damit sehr
zu empfehlen!"
Schönes Wochenende
Gruss Joachim
auf Fehlersuche
30.01.2004 11:46:21
Joachim
Hi Roland!
Bin nochmals auf Fehlersuche gegangen und hab' folgendes entdeckt: Bei den Meldungen hat sich ein kleiner Fehler versteckt.
Ich hab in der "empfaengerliste.xls" 3 Tabellbläter angelegt: 2003, 2004 und 2005.
Dann hab ich alle Varianten mal durchprobiert (soll Blatt xy abgeglichen und gelöscht werden?):
1. Nein - Nein - Nein: ok
2. Nein - Nein - Ja: ok
3. Nein - Ja - Nein: Fehler in der Meldung!
4. Nein - Ja - Ja: ok
5. Ja - Ja - Ja: ok
6. Ja - Ja - Nein: Fehler in der Meldung!
7. Ja - Nein - Ja: Fehler in der Meldung!
8. Ja - Nein - Nein: Fehler in der Meldung!
Der Fehler ist folgender: Wenn irgendwann "Ja" ausgewählt wurde, wird bei allen darauffolgenden "Neins" die Meldung mit übernommen: "Es wurden x Nummern in Blatt XY gelöscht". Die Summierungs-Meldung ist dann zwar richtig addiert, aber in Wirklichkeit natürlich falsch. Und: Die Nummern werden nicht gelöscht (wie gesagt, nur ein Meldungsfehler).
Ich teste noch ein bisschen weiter...
Gruss Joachim
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige