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

Script für Positionssuche über 2 Mappen verändern

Script für Positionssuche über 2 Mappen verändern
21.06.2006 16:04:45
Nicole
Hallo !
ich brauche heute eure Hilfe.
und zwar folgendes Script durchsucht die Datei
Händler2 nach den Positionsnummern in Spalte A
und fügt mir diese in die Datei mein.xls ein.
Es erkennt dabei bereits vorkommende Positionen.
Leider werden die Positionen in der falschen Reihenfolge
übernommen und ich würde gerne erreichen, dass nicht speziell
die Datei Händler2.xls durchsucht wird sondern eine gerade noch
geöffnete Datei.
Denn meine Aufmaßbläter haben immer unterschiedliche Namen.
Kann mir da jemand helfen ?
Gruß Nicole

Sub vergleichen_und_entfernen()
'Beide Dateien müssen geöffnet sein!
'Die Artikelnummern stehen jeweils in Spalte "A" ab Zeile 2
Dim wksAlt As Worksheet
Dim wksNeu As Worksheet
Dim wksDel As Worksheet
Dim lngE As Long
Dim lngR As Long
Dim lngC As Long
Dim sFind As Range
Set wksAlt = Workbooks("Händler2.xls").Sheets("Händler2")
Set wksNeu = Workbooks("mein.xls").Sheets("mein")
Set wksDel = Workbooks("mein.xls").Sheets("mein")
'Dateinamen und Tabellennamen anpassen
lngE = wksAlt.Range("A65536").End(xlUp).Row
lngC = wksDel.Range("A65536").End(xlUp).Row + 1
For lngR = lngE To 2 Step -1
Set sFind = wksNeu.Range("A2:A65536").Find(what:=wksAlt.Cells(lngR, 1), _
LookIn:=xlValues, lookat:=xlWhole)
If sFind Is Nothing Then
wksAlt.Cells(lngR, 1).EntireRow.Copy Destination:=wksDel.Cells(lngC, 1)
lngC = lngC + 1
wksAlt.Cells(lngR, 1).EntireRow.Insert
End If
Set sFind = Nothing
Next
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Script für Positionssuche über 2 Mappen veränd
21.06.2006 16:42:52
ChrisL
Hallo Nicole
Ersetze mal...
Set wksAlt = Workbooks("Händler2.xls").Sheets("Händler2")
durch...
Set wksAlt = ActiveWorkbook.Sheets("Händler2")
...oder...
Set wksAlt = ActiveSheet
Gruss
Chris
AW: Script für Positionssuche über 2 Mappen verändern
21.06.2006 16:50:48
fcs
Hallo Nicole,
mein Vorschlag zur Anpassung (ungetestet)
mfg
Franz

Sub vergleichen_und_entfernen()
'Beide Dateien müssen geöffnet sein!
'Die Artikelnummern stehen jeweils in Spalte "A" ab Zeile 2
Dim wksAlt As Worksheet
Dim wksNeu As Worksheet
Dim wksDel As Worksheet
Dim lngE As Long
Dim lngR As Long
Dim lngC As Long
Dim sFind As Range
Dim Datei As Variant
'ggf. Aufmaßdatei öffnen
If MsgBox("Aktive Datei vergleichen? Bei 'Nein' wird Datei-Öffnen-Dialog angezeigt", vbYesNo) = vbNo Then
Datei = Application.Dialogs(xlDialogOpen).Show("*.xls")
If Datei = False Then Exit Sub
End If
Set wksAlt = ActiveWorkbook.Sheets(1)  'Falls Blatt 1 nicht stimmt, dann muß der Blattname noch irgendwie ermittelt werden.
Set wksNeu = Workbooks("mein.xls").Sheets("mein")
Set wksDel = Workbooks("mein.xls").Sheets("mein")
'Dateinamen und Tabellennamen anpassen
lngE = wksAlt.Range("A65536").End(xlUp).Row
lngC = wksDel.Range("A65536").End(xlUp).Row + 1
lngR = 2
Do Until lngR > lngE
Set sFind = wksNeu.Range("A2:A65536").Find(what:=wksAlt.Cells(lngR, 1), _
LookIn:=xlValues, lookat:=xlWhole)
If sFind Is Nothing Then
wksAlt.Cells(lngR, 1).EntireRow.Copy Destination:=wksDel.Cells(lngC, 1)
lngC = lngC + 1
wksAlt.Cells(lngR, 1).EntireRow.Insert
lngE = lngE + 1
End If
Set sFind = Nothing
lngR = lngR + 1
If lngR > 1000 Then Exit Do ' Notausgang falls Zähler in Endlosschleife laufen sollte
Loop
End Sub

Anzeige
AW: Script für Positionssuche über 2 Mappen verändern
21.06.2006 18:11:35
Nicole
Hallo Franz
Deine Lösung ist gut, aber wenn ich eine Datei öffne
und es gibt einen Zahlenlücke (1,2, ,4) dann
erhalte ich dazwischen in der Datei, die ich neu geöffnet habe
Leerzeilen. Das sollte nicht so sein, da sich dann die
ganze Datei verändert, die Datei die geöffnet wird muß in diesem
Fall unbedingt unverändert bleiben.
Und wenn ich bei der MsgBox auf ja klicke passiert
bei mir garnichts.
Vielleicht kannst Du nochmal helfen
Aber schon mal vielen Dank für deine Mühe
Nicole
AW: Script für Positionssuche über 2 Mappen veränd
22.06.2006 00:56:07
fcs
Hallo Nicole,
passe den Code an wie unten markiert, damit keine Leerzeilen eingefügt werden. Ich hatte den Sinn dieser Zeile in deinem ursprünglichen Code eh nicht verstanden. Du kannst dann statt Do ... Loop auch wieder mit einer For ... Next-Schleife arbeiten, wenn die Zeile mit dem Zellen-Einfügen entfällt.

For lngR = 2 to lngE
Set sFind = wksNeu.Range("A2:A65536").Find(what:=wksAlt.Cells(lngR, 1), _
LookIn:=xlValues, lookat:=xlWhole)
If sFind Is Nothing Then
wksAlt.Cells(lngR, 1).EntireRow.Copy Destination:=wksDel.Cells(lngC, 1)
lngC = lngC + 1
End If
Set sFind = Nothing
Next lngR
Wenn du eine geöffnete Aufmaßdatei vergleichen möchtest, dann muss diese Datei in Excel aktiv angezeigt werden, bevor du das Makro startest. Sonst verwendet das Makro nicht die korrekte Datei als wksAlt.
Gruß
Franz

Sub vergleichen_und_entfernen()
'Beide Dateien müssen geöffnet sein!
'Die Artikelnummern stehen jeweils in Spalte "A" ab Zeile 2
Dim wksAlt As Worksheet
Dim wksNeu As Worksheet
Dim wksDel As Worksheet
Dim lngE As Long
Dim lngR As Long
Dim lngC As Long
Dim sFind As Range
Dim Datei As Variant
'ggf. Aufmaßdatei öffnen
If MsgBox("Aktive Datei vergleichen? Bei 'Nein' wird Datei-Öffnen-Dialog angezeigt", vbYesNo) = vbNo Then
Datei = Application.Dialogs(xlDialogOpen).Show("*.xls")
If Datei = False Then Exit Sub
End If
Set wksAlt = ActiveWorkbook.Sheets(1)  'Falls Blatt 1 nicht stimmt, dann muß der Blattname noch irgendwie ermittelt werden.
Set wksNeu = Workbooks("mein.xls").Sheets("mein")
Set wksDel = Workbooks("mein.xls").Sheets("mein")
'Dateinamen und Tabellennamen anpassen
lngE = wksAlt.Range("A65536").End(xlUp).Row
lngC = wksDel.Range("A65536").End(xlUp).Row + 1
lngR = 2
Do Until lngR > lngE
Set sFind = wksNeu.Range("A2:A65536").Find(what:=wksAlt.Cells(lngR, 1), _
LookIn:=xlValues, lookat:=xlWhole)
If sFind Is Nothing Then
wksAlt.Cells(lngR, 1).EntireRow.Copy Destination:=wksDel.Cells(lngC, 1)
lngC = lngC + 1
'Lösche die folgenden beiden Zeilen, wenn keine Leerzeilen eingefügt werden sollen
'          wksAlt.Cells(lngR, 1).EntireRow.Insert
'          lngE = lngE + 1
End If
Set sFind = Nothing
lngR = lngR + 1
If lngR > 1000 Then Exit Do ' Notausgang falls Zähler in Endlosschleife laufen sollte
Loop
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige