Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
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

Vgl. 2 Excel Register VBA

Vgl. 2 Excel Register VBA
04.08.2016 21:08:57
lena
Hallo zusammen,
ich bin VBA Anfängerin und habe eine Frage zu dem Vergleich und der Vernetzung zweier Excel Register.
Ich habe 2 Excel Regiser hochgeladen - siehe Link anbei - mit Beispiel Tabellen und Erklärungen in den Textfeldern. Ich bin mir nicht sicher, ob man dies mit VBA lösen kann.
https://www.herber.de/bbs/user/107407.xlsx
https://www.herber.de/bbs/user/107408.xlsx
Vielen Dank für eure Hilfe und ich wünsche einen schönen Abend.
Lg,
Lenalist

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vgl. 2 Excel Register VBA
05.08.2016 09:09:51
Michael
Hallo Lena!
Das kann man mit VBA lösen...
Bin jetzt mal davon ausgegangen, dass beide Mappen bereits offen sind, Deine hochgeladene Mappe 107408 ist bei mir MappeA (die Quell-Mappe), die Mappe 107407 MappeB (die Ziel-Mappe), also in MappeB werden die Zeilen gelöscht.
Dafür diesen Code in Mappe A einpflegen (allgemeines Modul) und ausführen:
Sub Vgl()
Dim WbA As Workbook
Dim WbB As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Dim rSuch As Range
Dim rNum As Range
Dim r As Range
Dim c As Long
Dim f As Range
Set WbA = Workbooks("MappeA.xlsm")
Set WbB = Workbooks("MappeB.xlsx")
Set WsQ = WbA.Worksheets("Tabelle1")
Set WsZ = WbB.Worksheets("Tabelle1")
With WsQ
Set rNum = .Range(.Cells(1, 2), .Cells(1, 2).End(xlToRight))
End With
Debug.Print rNum.Address
With WsZ
Set rSuch = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With
Debug.Print rSuch.Address
For Each r In rNum
With WsQ
c = WorksheetFunction.Count(.Range(r, .Cells(.Rows.Count, r.Column).End(xlUp))) - 1
End With
With rSuch
Set f = .Find(what:=r.Value, LookIn:=xlValues, searchorder:=xlNext)
If Not f Is Nothing Then
With f
.Offset(1, 0).Resize(c, 1).EntireRow.Delete
End With
End If
End With
Next r
End Sub
Passt?
LG
Michael
Anzeige
AW: Vgl. 2 Excel Register VBA
05.08.2016 14:39:31
lena
Hallo Michael,
perfekt. es funktioniert super. Vielen Dank.
Habe nur noch die Variablen vertauscht; so kann ich jetzt das Makro auch im Mappe B ausführen.
Vielen Dank. Genial. Ich bin begeistert.
Lg und schönes Wochenende dir,
lena
Super, freut mich... ebenfalls schönes WE!
05.08.2016 17:05:04
Michael
AW: Vgl. 2 Excel Register VBA
08.08.2016 19:51:04
lena
Hallo Michael,
leider muss ich dich erneut stören. Ich habe versucht, dass von dir erstellt Makro anzupassen, aber bin leider kläglich gescheitert:-(..vielleicht hilfst du mir nochmal. Ich würde mich sehr freuen.
Die hochgeladene Mappe 107479 ist die Mappe A (die Quell-Mappe).
https://www.herber.de/bbs/user/107479.xlsx
Die hochgeladene Mappe 107478 ist die Mappe B (die Ziel-Mappe).
https://www.herber.de/bbs/user/107478.xlsx
Ich möchte den Code nun in die Mappe B (die Ziel-Mappe) einpflegen.
Nun ist die Mappe B 12 Zeilen nach unten verrutscht und die Mappe A 1 Spalte nach rechts sowie 12 Zeilen nach unten verrutscht.
Ich habe die beiden Excel Dateien mit Beschreibungen erneut hochgeladen.
Vielen Dank für deine Hilfe.
Lg und schönen Abend,
lena
Anzeige
Bitte sehr...
09.08.2016 09:25:18
Michael
Guten Morgen Lena,
...hier Deine zwei Dateien in einem .zip-Archiv - in "LenaB.xlsm" ist das Makro bereits eingepflegt.
Ich hab das Makro auch etwas kommentiert, vielleicht wird Dir dann klarer was ich angepasst habe. Beide Mappen müssen wieder parallel geöffnet sein.
https://www.herber.de/bbs/user/107489.zip
Die Quell-Mappe ("Mappe A") musst Du im Code so bezeichnen, wie sie wirklich heißt. Die Ziel-Mappe ("Mappe B") muss jetzt im Code nicht mehr namentlich spezifiziert werden - diese Mappe ist jetzt als jene Mappe bestimmt, die das Makro enthält.
Der Code nochmal in Reinform:
Sub Vgl()
Dim WbA As Workbook
Dim WbB As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Dim rSuch As Range
Dim rNum As Range
Dim r As Range
Dim c As Long
Dim f As Range
'Annahme: BEIDE Mappen (A und B) sind bereits geöffnet
Set WbA = Workbooks("LenaA.xlsx") 'Name Deiner Mappe A
Set WbB = ThisWorkbook 'DIESE Mappe wird als Mappe B bestimmt
Set WsQ = WbA.Worksheets("Tabelle1") 'Quell-Blatt ist 1. Blatt aus A
Set WsZ = WbB.Worksheets("Tabelle1") 'Ziel-Blatt ist 1. Blatt aus B
'Bestimmen wieviele Nummern es in im Quell-Blatt (A) gibt
'Wir suchen ab C13 nach rechts, C13 = Cells(13, 3) (=Zelle(Zeile, Spalte))
With WsQ
Set rNum = .Range(.Cells(13, 3), .Cells(13, 3).End(xlToRight))
End With
'Bestimmen wo die in A gefundenen Nummer in B gesucht werden
'Wir suchen die Nummern ab B13 in Mappe B bis zur letzten gefüllten in B:B
'B13 = Cells(13,2) (=Zelle(Zeile, Spalte))
With WsZ
Set rSuch = .Range(.Cells(13, 2), .Cells(13, 2).End(xlDown))
End With
'Jede Zelle (=Nummer) im Quell-Blatt durchgehen
For Each r In rNum
With WsQ
'Zählen wieviele Einträge darunter zu finden sind
c = WorksheetFunction.Count(.Range(r, .Cells(.Rows.Count, r.Column).End(xlUp))) - 1
End With
With rSuch
'Im o.a. Suchbereich nach der aktuellen Nummer suchen
Set f = .Find(what:=r.Value, LookIn:=xlValues, searchorder:=xlNext)
'WENN die Nummer im Suchbereich gefunden wird...
If Not f Is Nothing Then
With f
'...wird der zu löschende Bereich gewählt und gelöscht
.Offset(1, 0).Resize(c, 1).EntireRow.Delete
End With
End If
End With
Next r
End Sub
Passt?
LG
Michael
Anzeige
AW: Bitte sehr...
09.08.2016 18:03:37
Lena
Hallo Michael, super, vielen vielen Dank. Jetzt passt es perfekt. Ich musste nur bei meiner Tabelle aus dem Code die -1 entfernen, sonst wurde in der Zieldatei eine Zeile zu wenig gelöscht. Jetzt passt es aber perfekt. Vieken Dank auch für deine Erklärungen, jetzt verstehe ich auch, was du angepasst hast. Echt klasse...
Lg und schönen Abend, lena
Aber gerne! Schönen Abend! owT
09.08.2016 20:55:18
Michael
AW: Aber gerne! Schönen Abend! owT
10.08.2016 22:09:18
lena
Hallo Michael,
ich habe wieder mal eine Frage.
Ich habe in den von dir geschriebenen Code ganz oben ergänzt, dass die Mappe A die Quelldatei geöffnet wird.
Mittels dem Code Workbooks.Open Filename:="...." (hier steht der Name der Mappe A). Das funktioniert auch Prima.
Wie komme ich nun nach Beendigung des Makros per vba code wieder automatisch in die Zielmappe B zurück? Ich schaffe, dass irgendwie nicht über vba. Es bleibt die Mappe A (die Quelldatei) in oberster Ebene geöffnet an meinem Bildschirm. Ich möchte jedoch wieder auf die Mappe B zurückspringen.
Am liebsten würde ich die Quellmappe A nach Ausführung des Vergleichs wieder schließen. Wie baue ich das in den Code ein?
Vielen Dank für deine Hilfe.
Lg und schönen Abend dir,
lena
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige