Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem mit "On Error GoTo ..."

Forumthread: Problem mit "On Error GoTo ..."

Problem mit "On Error GoTo ..."
05.11.2024 20:57:31
Lutz
Hallo,
wenn ich nichts kopiert habe und Makro a abspiele, wird Error bei ActiveSheet.Paste erkannt und es geht zu weiter_2.
wenn ich nichts kopiert habe und Makro b abspiele, wird Error bei ActiveSheet.Paste nicht erkannt und es geht nicht zu weiter_2.

Siehe Beispiel:
https://www.herber.de/bbs/user/173408.xls

Was mache ich da falsch?
Danke vielmals für eure Hilfe
Gruß Lutz

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit "On Error GoTo ..."
05.11.2024 21:21:57
Onur
Wozu so ein seltsamer Code? Wozu Events abschalten?
DAS reicht:
Sub a()

On Error Resume Next
ActiveSheet.Paste
End Sub

Sub b()
On Error Resume Next
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
End Sub
Anzeige
AW: Problem mit "On Error GoTo ..."
05.11.2024 21:35:58
Yal
Hallo Lutz,

Du machst nichts falsches. Du versuchst nur "zu viel" zu machen. Es ist ratsam, immer nur einen "On Error" pro Sub zu haben (On Error gilt nur innerhalb des Subs oder Functions). Die Fehler-kritische Aktion können/sollten in separaten Subs abgelagert werden, wo dort nur eine Aktion vorgenommen wird.

Gern der Try-Catch-Finally Muster verwenden: Finally wird immer, auch nach eine Fehler, durchgelaufen. Es sollte daher minimale, nicht fehlerkritische Anweisung beinhalten. Die Name der Sprungmarken haben keine Bedeutung für den Compiler, man könnte genauso Tic, Tric & Trac verwenden. Try, Catch, Finally kommt von anderen Programmiersprache, wo es dort reservierte Wörte sind.

Sub b()

Application.EnableEvents = False
On Error GoTo Catch
Try: 'die Sprungmarke "Try" wird nie gerufen und ist daher nutzlos. Sie ist nur da, um den Muster Try-Catch-Finally vollständig zu machen.
Selection.PasteSpecial Paste:=xlPasteValues
GoTo Finally 'Bedingungslose Sprung, wenn keiner Fehler davor aufgetreten ist. Man überspringt damit "Catch"

Catch:
'hier wird was gemacht, was der Fehler behandelt. Minimalistisch bleiben.
Debug.Print "Err " & Err.Number & " in Sub b:" & Err.Description
'dann geht der Code weiter und macht die nächste Anweisungen
Finally:
Err.Clear 'Im Prinzip sollte immer den Fehler zurückgesetzt werden. VBA ist aber sehr tolerant
Application.EnableEvents = True
End Sub


VG
Yal
Anzeige
AW: Problem mit "On Error GoTo ..."
06.11.2024 01:15:07
Rudi Maintaire
Hallo,
eine mögliche Lösung:
Sub b()

Application.EnableEvents = False

On Error GoTo weiter_1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Exit Sub

weiter_1:
Call c

Application.EnableEvents = True
End Sub

Sub c()
On Error Resume Next
ActiveSheet.Paste
End Sub

Gruß
Rudi
Anzeige
"On Error" ist schon selbst meistens der Fehler!
06.11.2024 09:41:31
daniel
Hi
On Error Goto ist meistens keine gute Idee zur Programmsteuerung.
In den meisten Fällen kann man nämlich vorher abfragen, ob die nächste Aktion einen Fehler erzeugen wird oder nicht und dann kann man über diese Abfrage dem Fehler ausweichen

in deinem Fall geht es ja darum, ob aus der Excelspezifischen Zwischenablage (PasteSpecial) oder aus der allgemeinen Zwischenablage kopiert werden soll.
das Einfügen aus der excelspezifischen Zwischenablage funktioniert aber nur, wenn diese befüllt ist und das kann man abfragen (Application.CutCopyMode )

Wenn also aus der Excelspezifischen Zwischenablage eingefügt werden soll, wenn diese gefüllt ist und ansonsten aus der allgemeinen, dann am besten so:

Application.EnableEvents = False

if Application.CutCopyMode = 0 Then
ActiveSheet.Paste
Else
Selection.PasteSpecial xlpastevalues
end if
Application.EnableEvents = True


Gruß Daniel

Anzeige
AW: Problem mit "On Error GoTo ..."
06.11.2024 11:31:21
Piet
Hallo Lutz

du hast schon viele Antworten bekommen, mit Lösungsvorschlägen. Eine Frage ist offen geblieben!!
Wozu benötigst du - ActiveSheet.Paste?? - Das sind Standard Kopiervorgänge eines Makrorecorders.
Das ist bei uns eigentlich verpönt, läßt sich viel eleganter programmieren.

Bist jetzt hast du uns nie den ganzen Code hochgeladen. Vor allem nicht den Kopiervorgang.
Und bei der Selection Paste wissen wir auch nicht, welche Selection du vorher deklariert hast??
Kopiervorgänge sind so simpel, das sie normalerweise keinen On Error Befehl benötigen.

Ohne den ganzen Code zu sehen kann man nichts dazu sagen, auch keine Verbesserungs Tipps geben.

mfg Piet
Anzeige
AW: Sorry, ich übersah das die Beispieldatei vorliegt oWt
06.11.2024 11:53:45
Piet
...
AW: Problem mit "On Error GoTo ..."
06.11.2024 08:46:27
Lutz
Hallo Rudi,
danke. Ich probiere es damit.
Gruß Lutz
AW: Problem mit "On Error GoTo ..."
05.11.2024 22:03:00
Lutz
Hallo Yal,
danke, wenn ich das "zu viel" auf zwei Makros verteile geht es schon mal.

Sub b()
Application.EnableEvents = False
On Error GoTo weiter_1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.EnableEvents = True
Exit Sub
weiter_1:
c
End Sub

Sub c()
On Error GoTo weiter_2
ActiveSheet.Paste
weiter_2:
Application.EnableEvents = True
Exit Sub
End Sub

Bei deinem code funktioniert das Einfügen nicht, wenn ich nur einen Teil des Inhaltes kopiert habe. Also z.B bei "Meier" nur "eier".

Gruß Lutz
Anzeige
AW: Problem mit "On Error GoTo ..."
05.11.2024 21:34:02
Lutz
Hallo Onur,

wenn, dann brauche ich es schon wie in meinem Makro b der Beispielmappe. mit abgeschalteten Evens geht er da aber auch nicht. Also daran liegt es wohl nicht.

Gruß Lutz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige