935 Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (481 Punkte)
Hallo,

das u.a. Makro funktioniert. Allerdings die Fehlermeldung nicht so wirklich.
Es werden Daten markiert und kopiert (Zwischenablage) und in ein Tabellenblatt per Makro eingefügt. Hier ist nur ein kleiner Bereich nicht schreibgeschützt.
Wenn also die Daten aus der Zwischenablage nicht korrekt sind, soll eine Fehlermeldung angezeigt werden.
Die MsgBox wird zwar angezeigt, ein Error kommt zusätzlich...

Wie macht man so was?

------------
Sub Zwischenablage_einfügen()
On Error GoTo ErrMsg
ErrMsg: MsgBox "Bitte die cxDaten korrekt markieren und kopieren", , "Zwischenablage einfügen nicht möglich"
' Zwischenablage_einfügen Makro
On Error GoTo 0
Application.ScreenUpdating = False
Sheets("cx_copy").Visible = True
    Sheets("cx_copy").Select
    Range("A3").Select
    ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
        False
    Sheets(Array("cx_copy")).Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Abholanfrage -auftrag").Activate
    Application.ScreenUpdating = True
End Sub

8 Antworten

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

wenn du deine Fehlerbehandlungsroutine an den Anfang deines Makros stellt, wird diese ausgeführt, auch wenn kein Fehler vorhanden ist. Die Routine sollte also immer am Ende stehen oder in einem Extracode. Schau dir mal z.B. das hier an:
[url=http://www.vba-tutorial.de/fehler/fehlerbehandlung.htm]Link1[/url]
[url=http://www.online-excel.de/excel/singsel_vba.php?f=145]Link2[/url]

Der Fehler wird wohl in der Zeile
[code]ActiveSheet.PasteSpecial Format:="HTML"[/code]
auftauchen, da es das Format "HTML" hier nicht gibt  ([url=https://msdn.microsoft.com/de-de/vba/excel-vba/articles/xlpastetype-enumeration-excel]Pastespecial[/url]).

Werden die Daten aus einer Excel-Datei kopiert oder aus einem anderen Programm?

Gruß

M.O.
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo M.O.,

die Daten kommen aus einer Intranet Anwendung, deshalb das html Format.
Habe das Makro mal umgestellt:

so geht's wohl !?
---------------

Sub Zwischenablage_einfügen()
' Zwischenablage_einfügen Makro

On Error GoTo ErrMsg

'On Error GoTo 0
Application.ScreenUpdating = False
Sheets("Cx_copy").Visible = True
    Sheets("Cx_copy").Select
    Range("A3").Select
    ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
        False
    Sheets(Array("Cx_copy")).Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Abholanfrage -auftrag").Activate
    Application.ScreenUpdating = True

Exit Sub
ErrMsg:    MsgBox "Bitte die Cx Daten korrekt markieren und kopieren", , "Zwischenablage einfügen nicht möglich"
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("anfrage -auftrag").Activate
    Application.ScreenUpdating = True
End Sub
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo happy1998,

hast du es einfach mal getestet?

Gruß

M.O.
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
Hallo Happy,

[code]    Application.DisplayAlerts = False[/code]

sollte die meisten Warnungen / Fehler-Dialoge deaktivieren.

Mit dem Exit Sub ist so besser ja.


wenn du mehrere Sprungmarken machen möchtest und z.B. an verschiedenen Stellen verschiedene Fehler anzeigen zu können:

[code]Sub Zwischenablage_einfügen()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    On Error GoTo ErrMsg

    '...
    
    On Error GoTo ErrMsgZwei

    '...

    On Error GoTo ErrMsgDrei

    '...
    
    Application.ScreenUpdating = True
    GoTo endsub
ErrMsg:
    MsgBox "Bitte die cxDaten korrekt markieren und kopieren", , "Zwischenablage einfügen nicht möglich"
    GoTo endsub
ErrMsgZwei:
    MsgBox "Fehler2"
    GoTo endsub
ErrMsgDrei:
    MsgBox "Fehler3"
    GoTo endsub
endsub:
    Application.ScreenUpdating = True
End Sub
[/code]

dann brauchst du nicht bei jedem Fehler Screenupdating wieder auf true zu setzen sondern nur einmal.
0 Punkte
Beantwortet von
Hallo Community

Fehlervermeidung statt Fehlerkontrolle(dazu auch noch falsch ) wäre vorrangig!

Gruß Nighty
0 Punkte
Beantwortet von
Hallo Community!

Zur Info!
[code]MsgBox "Fehlernummer " & Err.Number & " - " & Err.Description, , Err.Source
[/code]

Gruß Nighty
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
Hallo Nighty.

Auch wenn ich deine grundsätzliche Auffassung zur Fehleranalyse teile, so lass doch erstmal...
Der Error der Auftitt hat eine bekannte Ursache die deshalb nicht weiter geprüft werden braucht.

Die Frage bestand ja gerade darin den Fehler NICHT anzuzeigen. Siehe daher Antwort 4, eine tiefere Fehleranalyse ist nicht immer "richtiger" - aber lass Happy das erstmal probieren

Grüße
René
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo zusammen,

sorry für die späte Reaktion :)

Die Datei (incl. Makro) soll im Team genutzt werden. Eine Vereinfachung ist das Einfügen von kopierten Daten aus der Zwischenablage. Die Daten lassen sich nur einfügen, wenn passend (gesperrte / ungesperrte Zellen im versteckten Tabellenblatt).
Es hatte sich aber gezeigt, dass bei falschem einkopieren sich das Makro meldet ....

Hierum ging's vorrangig: Wenn man (bekannte) Fehler macht, soll sich das Makro beenden und einen Hinweis geben.

@ M.O.
Den Befehl Exit Sub und die Anordnung des MsgBox ans Ende hatte ich "mal versucht".
Das Makro scheint zu funktionieren, da ich aber kein Fachmann bin hatte ich sicherheitshalber noch mal nachgefragt.

Im Übrigen:
Vielen Dank an ALLE insbes. an M.O. für die Hilfe; habe zierlich viel lernen können :)
...