VBA Problem mit Makro
Hallo zusammen,
ich habe ein Problem mit einem Makro. Es soll mir aus einem Unterordner alle (ca. 200) excel dateien auslesen bzw aus jeder datei 6 bestimmte zellen kopieren und diese in die aktuelle datei einfügen. Soweit so gut, das Makro funktioniert, wenn ich es mit besipiel excel tabellen mache... nur sobald die original dateien ins spiel kommen funktioniert es nicht mehr.
Die orginal Datein sind schreib geschütze und mit anderen Makro versteckte Dateien. Ist es möglich, dass das Makro durch den Schreibschutz nicht funktioniert?
Das komische ist, dass es die erste geforderte zelle der ersten datei ausliest und danach der fehler kommt und das makro aufhört zu laufen...
Der Fehler tritt immer in folgender Zeile auf:
ThisWorkbook.Sheets("form").Cells(iRow, 1).PasteSpecial
Falls noch irgendwelche Informationen fehlen fragt mich :)
Hoffe jemand kann mir helfen...
Antwort schreiben
Antwort 1 von ina87xxx vom 14.07.2021, 21:41 Options
hier noch der code:
Option Explicit
Sub Daten_kopieren()
Dim Pfad As String, Dateiname As String, iRow As Long
Application.ScreenUpdating = False
Pfad = "F:\RKA\Kfz\JA2008\NK und LZB\von Gesellschaft\Forms\"
Dateiname = Dir(Pfad & "*.xls")
Do While Dateiname <> ""
Workbooks.Open Filename:=Pfad & Dateiname
iRow = ThisWorkbook.Sheets("form").Range("A65536").End(xlUp).Offset(1, 0).Row
Workbooks(Dateiname).Sheets("form").Range("J6").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 1).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J8").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 2).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J14").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 3).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J126").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 4).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J217").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 5).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J219").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 6).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J252").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 7).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J156").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 8).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J257").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 9).PasteSpecial
Workbooks(Dateiname).Sheets("form").Range("J371").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 10).PasteSpecial
Workbooks(Dateiname).Close
Dateiname = Dir()
Loop
End Sub
Antwort 2 von coros vom 15.07.2021, 05:27 Options
Hallo Marina,
was für eine Laufzeitfehlermeldung wird Dir denn angezeigt, wenn das Makro mit dem Laufzeitfehler beendet wird?
Du schreibst, dass der Fehler immer in der Codezeile
ThisWorkbook.Sheets("form").Cells(iRow, 1).PasteSpecial
auftritt. Hast Du die Zeilen
Workbooks(Dateiname).Sheets("form").Range("J6").Copy
ThisWorkbook.Sheets("form").Cells(iRow, 1).PasteSpecial
mal durch ein Hochkomma ( ' ) auskommentiert oder gelöscht und dann geprüft, ob das Makro durchläuft?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 3 von ina87xxx vom 15.07.2021, 09:16 Options
Hallo Oliver,
also der Fehler heißt:
Run-time error '-2147417848(80010108)' Method 'PasteSpecial' of object 'Range' failed
Der Debugger springt dann immer sofort in die Zeile:
ThisWorkbook.Sheets("form").Cells(iRow, 1).PasteSpecial
Wenn ich die Zeile dann auskommentiere und das Makro nochmal laufen lasse kommt der Fehler:
Run-time error 9 Subscript out of range
und danach springt der Debugger dann in die Zeile davor:
Workbooks(Dateiname).Sheets("form").Range("J6").Copy
Da mir die erste Zelle der ersten Datei kopiert wird liegt das Problem sozusagen darin, dass das Makro nicht von der ersten Zelle zur nächsten springt.
Vielen Dank...
Antwort 4 von coros vom 15.07.2021, 09:23 Options
Hallo Marina,
ich hatte geschrieben, Du möchtest auch mal die Codezeile
Workbooks(Dateiname).Sheets("form").Range("J6").Copy
auskommentieren um dann zu sehen, ob das Makro durchläuft oder ob der Fehler dann in der nächsten Copy-Anweisung auftritt.
Mach das mal bitte und gib bescheid, ob das Makro durchläuft oder ebenfalls abbricht.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 5 von ina87xxx vom 15.07.2021, 12:25 Options
Hi Oliver,
sorry das hab ich etwas unklar geschrieben ;)...
Ich habe es aus kommentiert und es ging trotzdem nicht...
aber ich hab ne neue spur...
hab eine ungeschütze datei aus dem vorjahr gefunden und bei der funktioniert es... sprich es muss irgendwie an dem blattschutz liegen...
irgendein tip, was ich machen könnte?
ist es einfach ein neues makro zu schreiben oder veruchen den blattschutz aufzuheben?!
Grüßle
Antwort 6 von coros vom 15.07.2021, 12:35 Options
Hallo Marina,
mit der "Worksheet.Unprotect-Methode" kannst Du den Blattschutz aufheben. Schaue dazu mal in der VBA-Hilfe nach. Das wird dort ausführlich beschrieben.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.