Excel Makro "Übertrag"

Ray

Stammgast
Hallo

Ich habe folgendes Problem: Ich habe mir eine Excelvorlage mit Markos gemacht. Beim Erstellen des Makros (Aufzeichnen) bzw. der Vorlage habe ich keine Probleme festgestellt. Bei der Nutzung ist jetzt aber ein Problem aufgetaucht. Ich habe zwei Makros, die ein bestehendes Arbeitsblatt kopieren und anschliessend den Inhalt des Formular leeren sollen.

Das Makro sieht so aus (Auszug):

Sheets("Spesennachweis").Select
Sheets("Spesennachweis").Copy After:=Sheets("Spesennachweis")
Sheets("Spesennachweis").Select
Range("A16").Select
ActiveSheet.Unprotect
Range("A16:D58").Select
[highlight]Selection.ClearContents[/highlight]
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, AllowSorting:=True​
Application.Run "AutoDatum"
Range("A16").Select
Sheets("Abrechnung").Select
Range("A21").Select
Selection.End(xlDown).Select​

End Sub

Dabei taucht jeweils folgende Fehlermeldung immer beim Befehl "Selection.ClearContents" auf:

Laufzeitfehler: 438

Objekt unterstützt diese Eigenschaft oder Methode nicht


Eigentlich ist der Bereich, der gelöscht werden soll, nicht geschützt. Deshalb habe ich zuerst, ein Makro aufgezeichnet, das den Blattschutz nicht aufhebt um die Löschung vorzunehmen. Dann hatte ich allerdings schon diese Fehlermeldung. Deshalb ist im vorliegenden Makro ein Befehl enthalten, der zuerst den Blattschutz aufhebt, bevor der Bereich gelöscht wird. Wie man sieht, hat es leider nichts genützt. Der Fehler muss eine andere Ursache haben.

Kann mir jemand einen Hinweis geben, was in meinem Makro geändert werden muss, damit es tatsächlich funktioniert?

Danke für Eure Hilfe
Ray
 

Ray

Stammgast
Hallo Nimrod80

Das funktioniert leider nicht.

Ich habe aber rausgefunden woran es liegen könnte. Auf dem Arbeitsblatt hat es Buttons, die es mitkopiert, wenn ich das Blatt kopiere. Diesen Befehl habe ich entfernt, weil ich sonst einen anderen Fehler habe. Aus diesem Grund kommt die besagte Fehlermeldung.

Es muss eine andere Lösung geben. Ich werde euch auf dem laufenden halten, bin aber nach wie vor auch an weiteren Vorschlägen interessiert.

Gruss
Ray
 

Ray

Stammgast
Guten Morgen

Nun weiss ich definitiv weshalb der Fehler entsteht.

Ich habe zuerst die verschiedenen Makros aufgezeichnet. Unter anderem auch das Makro "Übertrag".

Danach habe ich dem Formular verschiedene Formularsteuerelemente (Buttons, Check-Boxes etc.) hinzugefügt, um das Formular weitestgehend selbsterklärend zu gestalten und um die Makros sichtbar zu machen. Danach taucht der Fehler auf. Wenn ich die Formularsteuerelemente entferne, funktioniert das Makro problemlos.

Nun habe ich auch zwei Lösungsansätze:

  1. Ich entferne alle Formularsteuerelemente und weise die Makros der Symbolleiste für den Schnellzugriff zu. :( Das hat allerdings den Nachteil, dass das Formular nicht mehr so benutzerfreundlich ist, weil die Buttons doch recht prominent und situationsgerecht überall auf dem Formuar plaziert werden können. Zudem können Makros keine Check-Boxen, Drehfelder oder andere Formularsteuerelemente ersetzen.

  2. Wenn ich das Makro aufteile funktioniert es auch mit dem Löschen bzw. Leeren des Formulars. d.h. Im ersten Makro wird das Formular kopiert und das Makro abgeschlossen. Im zweiten Makro wird der Inhalt des Formulars gelöscht. Nun muss jedes Makro je separat einem Button zugewiesen und demzufolge auch einzeln gestartet werden. Damit funktioniert das Löschen des Formularinhalts problemlos. Es funktioniert aber nicht, nun diese beiden Makros ineinander zu verschachteln. Sobald ich das mache, taucht der Fehler wieder auf.

    Das ist zwar benutzerfreundlicher als die erste Lösung aber leider auch nicht restlos überzeugend. Am liebsten hätte ich schon einen Lösungsansatz, der alles in einem Schritt erledigt.:confused:

Danke an alle, die über das Problem nachgedacht haben. Vielleicht kommt ja doch noch ein genialer Vorschlag, der alle Anforderungen erfüllt.

Gruss
Ray
 
Zuletzt bearbeitet:

FreeRider

Stammgast
Hy Ray

Hast Du eventuell ein Muster/Testfile mit Musterdaten, damit ich das ganze nicht nachbauen muss?
Werde es mir dann gerne anschauen.
 

Ray

Stammgast
Hallo FreeRider

Danke für dein Angebot. Unter diesem Link findest du die Musterdatei. Beim Erstellen der Musterdatei bin ich auf das Problem gestossen. Ich habe neben allen übrigen persönlichen Angaben auch mein Logo aus den Tabellen entfernt. Danach haben meine Makros problemlos funktioniert. Dann habe ich wieder Logos (unpersönliche) eingefügt, und siehe da, das Problem war wieder vorhanden.

Die problematischen Makros sind hinter den rot beschrifteten Buttons versteckt. Wenn ich ein Makro mit den grün beschrifteten Buttons ausführe funktioniert dieses problemlos, obwohl diese Makros auch mit den nichtfunktionierenden Makros verknüpft sind.

Die Makros sind auch mit der Symbolleiste für den Schnellzugriff verknüpft. Ich hoffe, die wird bei dir auch angezeigt.

Die Tabellen sind zwar geschützt, haben aber keine Passwörter. Dadurch kannst du den Schutz einfach aufheben und sämtliche Funktionen sehen bzw. allenfalls auch korrigieren.

Besten Dank für deine Hilfe
Ray
 

FreeRider

Stammgast
Hallo Ray

Bitte versuche mal folgendes (ich habe es jetzt nur anhand des Makros <SpesenLeer> so getestet).
Ersetze in deinem Makro wie gekennzeichnet - die beiden kursiven Zeilen, die mit ' beginnen, kannst du löschen

Code:
Sub SpesenLeer()
    Sheets("Spesennachweis").Select
[COLOR="#FF0000"]    ActiveSheet.Range("A16:D58").ClearContents[/COLOR]
[I]    'Range("A16:D58").Select
    'Selection.ClearContents[/I]
    Range("A16").Select
    Application.Run "AutoDatum"
End Sub

Hintergrund:
Beim debuggen habe ich festgestellt, dass der Fehler nur bei jedem zweiten Durchlauf auftritt. Allerdings beginnend bei 1 :) (also 1., 3., 5. Durchlauf usw.). Darum entsteht der Eindruck, dass <Selection.ClearContents> der Fehler ist.
Aber eigentlich führt Excel die Zeile davor --> <Range("A16: D58").Select> nicht immer sauber aus. Warum auch immer - er markiert den Range <A16: D58> nicht immer ...:confused:
Mit meinem Befehl umgehe ich das, da er den Range vorher nicht separat markiert sondern in einem Befehl ausführt.

Im Makro "Abrechnung leer" sieht das dann so aus:
Code:
    Sheets("Abrechnung").Select
[COLOR="#FF0000"]    Range("A22:D55,F22:F55").ClearContents[/COLOR]
    'Range("A22:D55,F22:F55").Select
    'Selection.ClearContents

Bitte gib doch ein kurzes Feedback, ob diese kleine Änderung den gewünschten Effekt gebracht hat.
 

Ray

Stammgast
Danke

Hallo FreeRider

Besten Dank für deine Hilfe es klappt mit deinem Vorschlag. Das ist absolut sensationell. Ich bin leider nicht so versiert in der Makroprogrammierung und zeichne meine Makros meistens nur auf und nehme dann kleinere Anpassungen direkt im Code vor.

Nochmals vielen Dank
Ray
 
Oben