2.1k Aufrufe
Gefragt in Anwendungen(Java,C++...) von ina87xxx Einsteiger_in (15 Punkte)
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...

6 Antworten

0 Punkte
Beantwortet von ina87xxx Einsteiger_in (15 Punkte)
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
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ina87xxx Einsteiger_in (15 Punkte)
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...
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ina87xxx Einsteiger_in (15 Punkte)
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
0 Punkte
Beantwortet von coros Experte (4k Punkte)
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
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...