Supportnet / Forum / Tabellenkalkulation
VBA - PasteSpecial = Laufzeitfehler
Frage
Allseits einen wunderschönen Guten Morgen!
Ich benötige (mal wieder) die Hilfe von einem
Excel- bzw. VBA-Genie.
Grundidee:
Ich möchte Werte von einem Blatt auf das andere übertragen.
Dazu habe ich mir ein Makro zusammengebastelt.
1 x funktioniert es einwandfrei, aber beim 2. Versuch kommt es immer wieder zu einem Laufzeitfehler.
Leider weiss ich nicht warum.
Zur Vereinfachung habe ich meine Musterdatei01 unter
[url]http://www.file-upload.net/download-1168579/Test01_PasteSpecial.zip.html[/url]
abgelegt.
Vielleicht kann sich jemand den Code ansehen und mir sagen woran es scheitert.
Getestet unter Office2003 SP3
LieGrü
Tom
Antwort 1 von Flupo
Überprüfe mal, ob die Befehle zum Schutz und entsperren der Datei alle Sinn machen.
Ich habe die drei Zeilen (2x unprotect und 1x protect) auskommentiert und so läuft das Makro.
Was willst du eigentlich mit der IF-Schleife bezwecken?
Du überprüfst damit, ob eine Zelle leer ist und löscht sie in diesem Fall. Unter dem Strich machst du also garnichts.
Weiter oben die beiden Zeilen
sind Überflüssig und können auch raus.
Gruß Flupo
Ich habe die drei Zeilen (2x unprotect und 1x protect) auskommentiert und so läuft das Makro.
Was willst du eigentlich mit der IF-Schleife bezwecken?
Du überprüfst damit, ob eine Zelle leer ist und löscht sie in diesem Fall. Unter dem Strich machst du also garnichts.
Weiter oben die beiden Zeilen
Sheets("Zusammenfassung_Urlaub").Activate
Range("a3").Selectsind Überflüssig und können auch raus.
Gruß Flupo
Antwort 2 von Tomschi
Hallo Flupe!
Danke, dass Du so rasch auf mein Posting reagiert hast!
(2x unprotect und 1x protect) --> Was meinst Du damit?
In meinem Code finde ich nur einmal
ActiveSheet.Unprotect Password:="123abc" bzw.
ActiveSheet.Protect Password:="123abc"
Ich benötige diesen Zeilen jedoch auf jeden Fall, da der Bereich geschützt ist und nur nach dem Aufheben das Einfügen klappen kann. Oder irre ich mich da?
Wie sonst müsste der Code aussehen?
Der Löschvorang wird ebenfalls benötigt.
Im Blatt "Zusammenfassung_Urlaub" wird der neue Urlaubssaldo ermittelt.
Gegebenenfalls ist dieser null und wird trotzdem auf das Blatt "Urlaub" kopiert.
Wenn ich jetzt z. B. auf die Zelle D37 eine Abfrage =wenn(D37="";"";"Fehler") mache, dann erhalte ich als Ergebnis "Fehler".
Dies hat in der Originaldatei dann negative Auswirkungen auf weitere Zellen und daher lösche den Zellbereich.
Sorry, jetzt habe ich meine Fehler gesehen.
Ich kopiere nicht "" sondern 0 und daher ist meien Folgeformel falsch. Vergiss also den letzten Absatz.
Ich werde die Formel entsprechend abänderung und die If-Schleife löschen.
Vielleicht fällt Dir trotzdem noch was zu dem Schutz ein.
Tschau
Tom
Danke, dass Du so rasch auf mein Posting reagiert hast!
(2x unprotect und 1x protect) --> Was meinst Du damit?
In meinem Code finde ich nur einmal
ActiveSheet.Unprotect Password:="123abc" bzw.
ActiveSheet.Protect Password:="123abc"
Ich benötige diesen Zeilen jedoch auf jeden Fall, da der Bereich geschützt ist und nur nach dem Aufheben das Einfügen klappen kann. Oder irre ich mich da?
Wie sonst müsste der Code aussehen?
Der Löschvorang wird ebenfalls benötigt.
Im Blatt "Zusammenfassung_Urlaub" wird der neue Urlaubssaldo ermittelt.
Gegebenenfalls ist dieser null und wird trotzdem auf das Blatt "Urlaub" kopiert.
Wenn ich jetzt z. B. auf die Zelle D37 eine Abfrage =wenn(D37="";"";"Fehler") mache, dann erhalte ich als Ergebnis "Fehler".
Dies hat in der Originaldatei dann negative Auswirkungen auf weitere Zellen und daher lösche den Zellbereich.
Sorry, jetzt habe ich meine Fehler gesehen.
Ich kopiere nicht "" sondern 0 und daher ist meien Folgeformel falsch. Vergiss also den letzten Absatz.
Ich werde die Formel entsprechend abänderung und die If-Schleife löschen.
Vielleicht fällt Dir trotzdem noch was zu dem Schutz ein.
Tschau
Tom
Antwort 3 von Flupo
Zitat:
(2x unprotect und 1x protect) --> Was meinst Du damit?
In meinem Code finde ich nur einmal
ActiveSheet.Unprotect Password:="123abc" bzw.
ActiveSheet.Protect Password:="123abc"
(2x unprotect und 1x protect) --> Was meinst Du damit?
In meinem Code finde ich nur einmal
ActiveSheet.Unprotect Password:="123abc" bzw.
ActiveSheet.Protect Password:="123abc"
Mein Fehler. Sorry.
Aber ich weiß jetzt, wo das Problem liegt.
Es lässt sich auch ganz einfach reproduzieren.
Wenn man einen Bereich kopiert, dann zum Zielbereich wechselt und den Schutz rausnimmt, "vergisst" Excel den kopierten Bereich und das Einfügen scheitert mit der Fehlermeldung.
Du musst den Schutz nur vor dem Kopieren rausnehmen, dann gehts.
Ich hab mal die ganze IF-Anweisung auf das Wesentliche reduziert:
If a = vbYes Then
Application.ScreenUpdating = False
Sheets("Urlaub").Activate
ActiveSheet.Unprotect Password:="123abc"
Sheets("Zusammenfassung_Urlaub").Range("Urlaubsendsaldo").Copy
Sheets("Urlaub").Activate
Range("D4").PasteSpecial Paste:=xlPasteValues
ActiveSheet.Protect Password:="123abc"
Application.ScreenUpdating = True
Else...
Das Einschalten der Bildschirmaktualisierung hab ich mit in die Schleife genommen, da dies nur nötig ist, wenn vorher ausgeschaltet wurde.
Gruß Flupo
Antwort 4 von coros
Hallo Ihr beiden,
das was Flupo zu dem Fehler erklärt hat ist richtig.
Was aber nicht ganz stimmt ist das mit der Bildschirmaktualisierung. Diese muss eigentlich gar nicht wieder eingeschaltet werden, da diese sich nach Beenden eines Makros automatisch wieder einschaltet. Notwendig ist das Einschalten nur, wenn es im Makro zwingend erforderlich ist, ansonsten nicht.
Da Flupo bereits Deinen Abfrageteil gekürzt hat, nachfolgend noch eine weitere Kürzung, da auf Sheets("Urlaub").Activate ebenfalls verzichtet werden kann.
Hier also die gekürzte Fassung der Abfrage:
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.
das was Flupo zu dem Fehler erklärt hat ist richtig.
Was aber nicht ganz stimmt ist das mit der Bildschirmaktualisierung. Diese muss eigentlich gar nicht wieder eingeschaltet werden, da diese sich nach Beenden eines Makros automatisch wieder einschaltet. Notwendig ist das Einschalten nur, wenn es im Makro zwingend erforderlich ist, ansonsten nicht.
Da Flupo bereits Deinen Abfrageteil gekürzt hat, nachfolgend noch eine weitere Kürzung, da auf Sheets("Urlaub").Activate ebenfalls verzichtet werden kann.
Hier also die gekürzte Fassung der Abfrage:
If a = vbYes Then
Application.ScreenUpdating = False
With Sheets("Urlaub")
.Unprotect Password:="123abc"
Sheets("Zusammenfassung_Urlaub").Range("Urlaubsendsaldo").Copy
.Range("D4").PasteSpecial Paste:=xlPasteValues
.Protect Password:="123abc"
End With
ElseMfG,
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 coros
Hi,
ich nochmal. Ich habe gerade gesehen, dass die Forumsformatierung mal wieder einen Streich gespielt hat. Daher hier nochmal die gekürzte Fassung, die durch Kopieren 1:1 in das bestehende Projekt übernommen werden kann.
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.
ich nochmal. Ich habe gerade gesehen, dass die Forumsformatierung mal wieder einen Streich gespielt hat. Daher hier nochmal die gekürzte Fassung, die durch Kopieren 1:1 in das bestehende Projekt übernommen werden kann.
If a = vbYes Then
Application.ScreenUpdating = False
With Sheets("Urlaub")
.Unprotect Password:="123abc"
Sheets("Zusammenfassung_Urlaub").Range("Urlaubsendsaldo").Copy
.Range("D4").PasteSpecial Paste:=xlPasteValues
.Protect Password:="123abc"
End With
ElseMfG,
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 6 von Tomschi
Hallo Flupo!
Hallo Oliver!
Echt, Ihr seid der Wahnsinn!
Ich werde Euch heute in mein Abendgebet einschliessen!
DANKE!
Wieder jede Menge dazugelernt!
Tom
P.S.: Bitte wegen den Bonuspunkten nicht streiten. ;-)
Hallo Oliver!
Echt, Ihr seid der Wahnsinn!
Ich werde Euch heute in mein Abendgebet einschliessen!
DANKE!
Wieder jede Menge dazugelernt!
Tom
P.S.: Bitte wegen den Bonuspunkten nicht streiten. ;-)
Antwort 7 von Flupo
Zitat:
P.S.: Bitte wegen den Bonuspunkten nicht streiten. ;-)
P.S.: Bitte wegen den Bonuspunkten nicht streiten. ;-)
Ich werd's überleben. ;-)
Mir sind positive Rückmeldungen wichtiger als die Punkte.
Schönen Tag noch
Gruß Flupo
Antwort 8 von nighty
hi all :-)
wobei die bemuehungen eines anfaengers wertvoller als die eines profis sind :-)) und coros hat hervorragend korrigiert :-)))
gruss nighty
wobei die bemuehungen eines anfaengers wertvoller als die eines profis sind :-)) und coros hat hervorragend korrigiert :-)))
gruss nighty

