1.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen

Ich habe ein Makro, das Daten aus einem Textfile ausliest.

Soweit funktioniert das eigentlich ganz gut, zumindest mit den ersten Testdaten.

Nun kann es sein, dass die einzufügenden Daten mal mehr, mal weniger Zeilen lang sind.
Also möchte ich vor dem Einfügen den gesamten Inhalt des Blattes löschen, was ja auch kein Problem ist.

Sobald ich aber den Inhalt lösche und danach die Daten einfügen möchte, erhalte ich die Fehlermeldung: Run-time error 1004, PasteSpecial method of Range class failed.

Die Zeilen, mit welchen ich den Inhalt lösche sind wie folgt:

Cells.Select
Selection.Clear

Danach möchte ich mit folgendem Code die Daten einfügen:

Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False


Bei diesem Einfügen kommt dann die erwähnte Fehlermeldung.

Wenn ich den folgenden Code aber ohne die beiden Zeilen zum Löschen des Blattinhaltes laufen lasse, funktioniert's.

Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows("VDF_Mutations_Statistik_Basis.xlsx").Activate
Sheets("VDF_Temp20").Select
Cells.Select
Selection.Clear
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("VDF_Temp20").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle2").Sort.SortFields.Add Key:=Range( _
"X1:X349"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("VDF_Temp20").Sort
.SetRange Range("T1:AE349")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With



Kann mir jemand sagen, was da falsch ist?

Bin euch für eure Hilfe sehr dankbar!

Gruss Rolf

7 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

versuche statt

Sheets("VDF_Temp20").Select
Cells.Select
Selection.Clear
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False


mal

With Sheets("VDF_Temp20")
.UsedRange.Clear
.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End With


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

Hab's mit deinem Code probiert ...
Kommt beim Einfügen die gleiche Fehlermeldung.

Gruss Rolf
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

falsche selection

gruss nighty


Sheets("VDF_Temp20").Cells.Clear

statt
Sheets("VDF_Temp20").Select
Cells.Select
Selection.Clear
Range("A1").Select


selectionen sollten generell vermieden werden
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

beim einfuegen natuerlich entsprechende zielzelle angeben

gruss nighty
0 Punkte
Beantwortet von
Hallo zusammen

Hab das Problem gefunden...

Mit dem Löschen des Blatt-Inhaltes war auf dem Source-Sheet der Kopiermodus nicht mehr aktiv.

Hab's nun so umgestellt, dass ich die temporären Sheets am Anfang lösche und die Daten erst danach kopiert werden.

So funktioniert's nun mit allen Varianten.

Vielen herzlichen Dank für eure Unterstützung.

Gruss Rolf
0 Punkte
Beantwortet von
Hi All,

durch Ausführen der .Clear Methode wird der .CutCopyMode aufgehoben. Der Versuch .PasteSpecial auszuführen scheitert daran, dass schlicht nichts mehr in der Zwischenablage ist.

Führe das Löschen des Arbeitsblatts zu Beginn deines Makros aus bevor du .Copy verwendest. Dann sollte es funktionieren.

Gruß Mr. K.
0 Punkte
Beantwortet von
Mist, wieder zu spät :-)
...