PDA

Vollständige Version anzeigen : Fehlermeldung "paste-methode des worksheet-objektes konnte nicht ausgeführt werden"


Verzweifelte Claudia
18.07.2012, 15:12
Hallo liebes Forum,

bin gerade am Verzweifeln mit meinem Makro und leider konnte ich mir bisher weder im Forum noch durch googeln Hilfe anlesen - vielleicht könnt ihr mir helfen...

Public Sub Antrag_speichern_test2()

Dim lastrow As Integer
Dim WbkNeuName As Integer
Dim WbkNeu As Workbook
Dim Anfrage As Workbook
Dim testWbk As Workbook
Dim acutalWbk As Workbook


Workbooks.Open Filename:="C:\Users\Desktop\gesamtübersichtMakros"
lastrow = 2
Do While Cells(lastrow, 1) <> 0
lastrow = lastrow + 1
Loop

Workbooks.Add
WbkNeuName = Cells(lastrow, 1).Row - 2
Set WbkNeu = Workbooks.Add
WbkNeu.SaveAs ("C:\Users\Desktop\" & WbkNeuName & ".xlsx")
Workbooks.Open Filename:="C:\Users\Desktop\anfrage123"
Sheets(1).Range("B3:B10").Copy

Workbooks.Open Filename:="C:\Users\Desktop\" & WbkNeuName & ""
Sheets(1).Activate
With ActiveSheet
.Range("B3").Select
.Paste
End With

End Sub

Das Makro öffnet eine vorhandene Tabelle und liest daraus eine laufende Nummer aus. Unter dieser Nummer wird ein Workbook, das neu erstellt wird, abgelegt. Aus einem bestehenden Workbook sollen nun einige Zeilen in das neu angelegte Workbook kopiert werden und beim letzten .paste bringt excel mir den laufzeitfehler "die paste-methode des worksheet-objektes konnte nicht ausgeführt werden". ich bin am verzweifeln...
es sind keine verbundenen Zellen in den Tabellen und der Blattschutz ist auch deaktiviert...

Vielen lieben Dank im Voraus.

Liebe Grüße,
Claudia

chris-kaiser
18.07.2012, 15:27
Hi

auf Anhieb sehe ich einige Fehler....

aber was ist das?

Cells(lastrow, 1).Row - 2
In Lastrow ermittelst du die Zeile und davon willst du wieder die Zeile haben???

Oder soll der Zellinhalt ausgelesen werden?
2 Zeilen über der letzten gefunden Zelle in Spalte A von deiner Makrodatei?

soll dann auch eine neue Nummer in der Makrodatei abgelegt werden?

Verzweifelte Claudia
18.07.2012, 15:39
Hi Chris,

mit der lastrow Abfrage ermittele ich die nächste freie Zeile in meiner Tabelle. Da die laufende Nummer 1 aber erst in Zeile 3 generiert wurde, ist die laufende Nummer, unter der ich die Datei abspeichern will diefolgende: Cells(lastrow, 1).Row - 2.
"soll dann auch eine neue Nummer in der Makrodatei abgelegt werden?" -> verstehe leider nicht was du meinst...

Liebe Grüße und vielen Dank schonmal

chris-kaiser
18.07.2012, 15:50
Hi

Öhmm, da hast du einen kleinen Denkfehler ;)

Cells(lastrow, 1).Row =Lastrow


hier mal ein Versuch ohne Fehlerbehandlung

nur die Datei mit dem Code sollte offen sein
Pfad natürlich wieder anpassen... wobei der Desktop der denkbar ungünstigste Platz ist. :).
xls oder xlsx bitte auch kontrollieren! ich habe mal bei deinen Dateien xlsx angenommen.....

Option Explicit
Public Sub Antrag_speichern_test2()

Dim lastrow As Integer
Dim WbkNeuName As Integer
Dim WbkNeu As Workbook, myMakroWB As Workbook, myWbAnfrage As Workbook
Const Path As String = "C:\Temp\" '"C:\Users\Desktop\"


Set myMakroWB = Workbooks.Open(Filename:=Path & "gesamtübersichtMakros.xlsx")
lastrow = myMakroWB.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row - 2 'Blatt1???, -2 Zellen vom letzten Eintrag??


WbkNeuName = lastrow 'Cells(lastrow, 1).Value
Set WbkNeu = Workbooks.Add
WbkNeu.SaveAs (Path & WbkNeuName & ".xlsx")
Set myWbAnfrage = Workbooks.Open(Filename:=Path & "anfrage123.xlsx")
myWbAnfrage.Sheets(1).Range("B3:B10").Copy WbkNeu.Sheets(1).Range("B3")


WbkNeu.Close True
myWbAnfrage.Close False
myMakroWB.Close False


Set WbkNeu = Nothing
Set myWbAnfrage = Nothing
Set myMakroWB = Nothing

End Sub

NichtMehrVerzweifelt
18.07.2012, 16:05
Chris, du bist mein absoluter Held des Tages :) Danke!

Erklärst du mir noch 2 Sachen damit ich beim nächsten Mal schlauer bin?

1. Wo genau ist der Paste Befehl und wie kommt es dass das funktioniert ohne ein paste?
2. Wieso setzt du die workbooks am Ende auf nothing?

Tausend Dank dir!

chris-kaiser
18.07.2012, 16:21
Hi

freut mich wenn es passt! :)

myWbAnfrage.Sheets(1).Range("B3:B10").Copy WbkNeu.Sheets(1).Range("B3")

hier wird kopiert das Paste ist unnötig, durch die ganze "Selectiererei" werden Codes nur instabil.

Select und Activate sind zu 99,99% sinnlos.

das Objekte freigeben ist in VBA nicht unbedingt erforderlich, aber programiertechnisch richtig.(aus dem Speicher entfernen)

hier gibt es einen kleine Einführung in VBA (wegen Select, Activate und Ref.)
http://www.ms-office-forum.de/forum/showpost.php?p=1294829&postcount=1

und hier noch ein paar Wege wie du deinen Dateien noch öffnen und ansprechen könntest. ^^ das open verwende ich so gut wie nie in der Form wie ich es vorhin bei deinem Code gepostet habe. Zumeist ist createObject, bzw. Getopject bei mir im Einsatz.
http://www.ms-office-forum.de/forum/showpost.php?p=1337510&postcount=2

die Erklärungen findest du direkt im Code.

MäßigVerzweifelt
18.07.2012, 17:12
Hi Chris,

vielen lieben Dank.
Eine Frage habe ich dann doch noch. Gerade versuche ich das Makro in meine GesamtübersichtMakros einzubetten, da ich ja immer nur die gleichen Pfade anspreche.
Mache ich das mit deinem Code, bekomme ich eine Fehlermeldung, da die Datei schon geöffnet ist. Ändere ich den Befehl in
Set myMakroWB = Workbooks("C:\Users\Desktop\gesamtübersichtMakros")
und versuche es so anzusprechen, bekomme ich die Fehlermeldung Index außerhalb des gültigen Bereichs :(

Einen schönen Abend dir noch und vielen Dank,

Claudia

chris-kaiser
18.07.2012, 17:15
HI

;)

Set myMakroWB = Thisworkbook

müsste eigentlich reichen.

NichtMehrVerzweifelt
19.07.2012, 10:51
Verstehe zwar nicht, warum es mit
Set myMakroWB = Workbooks("C:\Users\Desktop\gesamtübersichtMakros")
nicht funktioniert hat, aber mit thisWorkbook geht es und jetzt bin ich glücklich :)

Tausend Dank dir!

WiederMalVerzweifelt
20.07.2012, 14:45
Hi Chris und alle anderen,

habe mal wieder ein unlösbares Problem und bräuchte eure Hilfe...

Hier ist ein TEil des Codes:
Die Variablen sind alle weiter oben deklariert.

lastrow = lastrow + 1
I = 3
Do While I <= lastrow
Set WbkAnfrage = Workbooks("C:\Users\brobeck\Desktop\" & I - 2 & ".xlsx")

If Cells(I, 12) = 0 And Cells(I, 3) <> 0 And Cells(I, 4) <> 0 And Cells(I, 5) <> 0 And Cells(I, 6) = 0 Then
Cells(I, 12) = "1. Freigabe M1"
Cells(I, 13) = "Zuständiger"
Set position = Cells(I, 14)
position = Format(Date + 5, "dd/mm/yyyy")
Cells(I, 15) = "nein"
End If

If Cells(I, 15) = "ja" And Cells(I, 6) = 0 Then erledigt = True
If erledigt = True And Cells(I, 12) = "1. Freigabe M1" Then
Cells(I, 15) = "nein"
erledigt = False
Cells(I, 12) = "Versendung der Unterlagen an ToGe"
Cells(I, 13) = "Hochenbleicher"
Set position = Cells(I, 14)
position = Format(Date + 5, "dd/mm/yyyy")
WbkAnfrage.Sheets(1).Range("E16:E17") = Format(Date, "dd/mm/yyyy")
End If

Dies ist nur ein Teilausschnitt (da der code mittlerweile unendlich lang ist :)), aber sobald ein Prozessschritt bestätigt wurde(in der Gesamtübersicht), soll in ein Dokument, das den detaillierten Antrag enthält und den Dateinamen trägt, der gleich der laufenden Nummer des Antrags in der Gesamtübersicht ist, das aktuelle Datum eingefügt werden. Aber leider gelingt es mir nicht den Detailantrag anzusprechen. Weder über WbkAnfrage noch über den genauen Pfad - irgendwie funktioniert es nicht und ich bin verzweifelt und weiß nicht warum.
Hat jemand eine Idee?
Wäre sehr sehr dankbar für Anregungen...

Liebe Grüße,
Claudia

chris-kaiser
23.07.2012, 07:34
Hallo Claudia

;)
weiß nicht warum

position = Format(Date + 5, "dd/mm/yyyy")
Set WbkAnfrage = Workbooks.OPEN("C:\Users\brobeck\Desktop\" & I - 2 & ".xlsx")
WbkAnfrage.Sheets(1).Range("E16:E17") = Format(Date, "dd/mm/yyyy")

ist aber mal rein geraten ;)
nur gehört das auch wieder geschlossen....

und das Set Position?
ist Position ein Objekt??

passt mit dem hier nicht überein!
position = Format(Date + 5, "dd/mm/yyyy")

Du mischt da einiges durcheinander......