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

While Schleife, Fehler~

While Schleife, Fehler~
21.12.2016 14:06:24
Marsl
Hallo,
habe eine While Schleife, die mir bisher immer ganz brav von ca. 80 Dateien die Daten in eine große Übersicht kopiert hat. Basis für die Anordnung der Daten ist eine Identifikationsnummer 1 ID Nummer = 1 Spalte.
Die Identifikationsnummer steht in D2 auf Datei X_Zettel
Der Bereich D5 bis DX wird kopiert und in die Übersichtsdatei kopiert (früher war dies E5 bis EX).
In dieser stehen die 80 verschiedenen Identifikationsnummern in D4 - CY4 sollte flexibel erweiterbar sein.
Ich hatte jetzt in der Quelldatei eine Spalte entfernt und bekomme es nicht hin die While Schleife entsprechend anzupassen.
Ich weiß jetzt gerade auch nicht mehr wirklich ob ich in der Zieldatei auch etwas geändert habe, der Einfügebereich in der Zieldatei beginnt in D8:D88 und geht bis CY8:CY88
Kann mir jemand helfen?
Ich denke der Fehler liegt an der While Schleife, da die Cells(zeile, spalte) sich ja ändern. Ich raff nur nicht wirklich die Ausdrücke, bzw. Ansagen die man in dieser While Schleife macht...
Set rSuch = .Range(.Cells(4, 6), .Cells(4, .Columns.Count).End(xlToLeft))
Sp = Application.Match(ID, rSuch, 0)
If Not IsError(Sp) Then
With WsQ
.Range("E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row).Copy
End With
.Cells(8, Sp + 5).PasteSpecial xlPasteValuesAndNumberFormats
Das alte Makro schaut im Ganzen so aus, meine angepasst Version erspare ich euch / mir jetzt _
lieber, da sie ja nicht funzt~ :

Sub SpaltenHolen()
Const R_ID$ = "E2"
Const PFAD$ = "M:Test"
Dim WbZ As Workbook
Dim WsZ As Worksheet
Dim WbQ As Workbook
Dim WsQ As Worksheet
Dim rSuch As Range
Dim Datei$, Sp, ID
Application.ScreenUpdating = False
Set WbZ = ThisWorkbook
Set WsZ = WbZ.Worksheets(1)
Datei = Dir(PFAD)
If Len(Datei) = 0 Then
MsgBox "Keine Dateieien gefunden in: " & PFAD, vbInformation, "Hinweis"
Exit Sub
End If
Do While Len(Datei) > 0
Set WbQ = Workbooks.Open(PFAD & Datei)
Set WsQ = WbQ.Worksheets(1)
ID = WsQ.Range(R_ID).Value
With WsZ
Set rSuch = .Range(.Cells(4, 6), .Cells(4, .Columns.Count).End(xlToLeft))
Sp = Application.Match(ID, rSuch, 0)
If Not IsError(Sp) Then
With WsQ
.Range("E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row).Copy
End With
.Cells(8, Sp + 5).PasteSpecial xlPasteValuesAndNumberFormats
End If
End With
WbQ.Close False
Datei = Dir
Loop
Application.ScreenUpdating = True
Set WbZ = Nothing
Set WsZ = Nothing
Set WbQ = Nothing
Set WsQ = Nothing
Set rSuch = Nothing
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
in PFAD fehlt \
21.12.2016 14:26:37
Rudi
Hallo,
muss auf jeden fall
Const PFAD$ = "M:\Test\
"
heißen.
Gruß
Rudi
AW: in PFAD fehlt \
21.12.2016 14:29:44
Marsl
Daran hängts net, den hab ich falsch kopiert ;)
AW: in PFAD fehlt \
21.12.2016 16:53:23
guenni
Ich würde das with in with weglassen, zumal es mehr Zeichen braucht, als 3 x wsq zu schreiben
With WsQ
.Range("E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row).Copy
End With

zu
 WsQ.Range("E5:E" & WsQ.Cells(WsQ.Rows.Count, 5).End(xlUp).Row).Copy

Dürfte aber auch nicht Dein Fehler sein
Mich wundert vor allem die "8" in .Cells(8, Sp + 5).PasteSpecial xlPasteValuesAndNumberFormats
denn das bedeutet doch dass von jeder Datei in die gleiche Zeile geschrieben wird.
Gruß,
Günther
Anzeige
AW: in PFAD fehlt \
22.12.2016 09:16:32
Marsl
Hmm, nee, das wars net. Jemand anders noch eine Idee?
AW: in PFAD fehlt \
22.12.2016 09:18:27
Marsl
Beitrag noch offen..
Nachdem der erste Code von mir ist...
22.12.2016 11:28:30
mir
Marsl,
...will ich hier doch noch mal einsteigen ;-).
Zu bisher immer ganz brav von ca. 80 Dateien die Daten in eine große Übersicht kopiert hat
Ja klar hat mein Code funktioniert, allerdings natürlich bezogen auf die damals von Dir genannten Bedingungen und Anforderungen.
Wenn Du jetzt schreibst
Ich hatte jetzt in der Quelldatei eine Spalte entfernt
Ich weiß jetzt gerade auch nicht mehr wirklich ob ich in der Zieldatei auch etwas geändert habe

Wie soll Dir da geholfen werden? Ich habe Dir damals den Code geliefert, aber ich helfe im Schnitt 4 Fragestellern im Forum pro Tag - ehrlich gesagt hab ich keine Ahnung, wie Deine Situation damals war, geschweige denn kann ich heute noch irgendwas mit der Information "ich habe irgendwo eine Spalte entfernt" anfangen. Und wenn Du nicht mal selbst weißt, was Du wo wie verändert hast, im Vergleich zur Ausgangssituation, tja...
D.h.: ich schreibe Dir den bestehenden Code gerne um bzw. schreibe Dir einen neuen, wenn Du nochmal klar legst, was genau Du jetzt (!) brauchst. Notfalls lade, wie damals, eine/mehrere Bsp-Datei(en) hoch, und zeige auf, was Du brauchst (d.h. wo steht welche ID, welcher Bereich soll wohin...).
@ Guenni:
Bevor Du solche Tipps gibst wär's evtl. hilfreich sich mit der Ausgangslage zu befassen bzw. diese zu kennen (@ Marsl: hättest allerdings auch auf den alten Beitrag verlinken können!), denn...
Mich wundert vor allem die "8" in .Cells(8, Sp + 5).PasteSpecial xlPasteValuesAndNumberFormats
denn das bedeutet doch dass von jeder Datei in die gleiche Zeile geschrieben wir

Ja sicher, denn es wird ein Spaltenblock kopiert - da reicht als Einfüge-Auswahl eine Zelle, die immer in der selben Zeile liegt (war damals Anforderung).
LG
Michael
Anzeige
AW: Nachdem der erste Code von mir ist...
22.12.2016 12:27:06
mir
Hi Michael,
danke nochmal fürs Feedback. Ja, war Dein Code und hat super funktioniert. Funktioniert jetzt auch wieder super. Hab nochmal bissl dran rumgebastelt und etwas rumgedoctort.
Problem war, nachdem ich aus der Quelldatei eine Spalte entfernt hatte, war der Bereich von E5:E nun in D5:D
Jetzt musste ich im Makro noch den ersten Cells Wert, den Range und den Cells(8, Sp +3 abändern. Dann hats wieder geklappt.
So schaut die While Schleife nun aus~
Set rSuch = .Range(.Cells(4, 4), .Cells(4, .Columns.Count).End(xlToLeft))
Sp = Application.Match(ID, rSuch, 0)
If Not IsError(Sp) Then
With WsQ
.Range("D5:D" & .Cells(.Rows.Count, 4).End(xlUp).Row).Copy
End With
.Cells(8, Sp + 3).PasteSpecial xlPasteValuesAndNumberFormats
End If
Danke nochmal :)
Anzeige
Na dann isses ja gut ;-), frohes Fest! owT
22.12.2016 13:07:01
Michael
AW: Danke Gleichfalls ;)
22.12.2016 13:22:34
Marsl
owT
AW: in PFAD fehlt \
22.12.2016 13:53:50
guenni
Hallo Michael,
Falls Du an dem Tipp mit WsQ was auszusetzen hast, kläre mich bitte drüber auf.
Dass es meiner Meinung nach dabei nur um Optik geht, ist hoffentlich aus dem Beitrag hervorgegangen.
Das mit der 8 war ein wundern, denn das ist eher unüblich, aber nicht zwingend falsch, ich kenne ja nicht das Tabellendesign. -
und es war mir nicht wirklich klar, ob bei der Änderung nicht auch schon am Code geändert wurde.
Hallo Marsl,
Sorry, dass ich am Problem vorbeigelesen hab'
Nach bekannter Lösung sehe ich jetzt, was ich alles überlesen habe (z.B. "Das alte Makro..."
Ich wünsche mir bessere Augen, und Euch allen ein frohes Fest
Günther
Anzeige
Alles gut, frohes Fest! owT
22.12.2016 14:02:54
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige