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

zu Spungmarke in anderem Modul springen

Forumthread: zu Spungmarke in anderem Modul springen

zu Spungmarke in anderem Modul springen
08.08.2014 15:23:01
ela
Hallo,
ich bin gerade dabei meinen Code zu modularisieren.
Den Code den ich in Modul1 "outsource" enthält eine Sprungmarke, welche in Tabelle1 definiert ist.
Hier ein kurzes Codebsp:
Sub Test ()
dim zaehler as integer
dim nenner as integer
'code
'Aufruf der Prozedur in Modul 1 mit übergabe der werte von zähler und nenner
Modul1.teilen zaehler, nenner
'code
beenden:
'code
End Sub
Sub teilen(zaehler as integer, nenner as integer)
dim ergebnis as integer
on error goto beenden
ergebnis = zaehler/nenner
on error goto 0
End Sub

Geht es nun, dass wenn in Modul1.teilen() ein fehler auftritt, dass die prozedur abbricht und zur sprungmarke "beenden" in Tabelle1.Test springt?
Bzw wie programmiere ich das?
Vielen dank für eure Hilfe
Grüße
Ela

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zu Spungmarke in anderem Modul springen
08.08.2014 15:34:57
Arthur
Hallo Ela.
Beruhigender Weise geht das nicht - hoffentlich. Nutze dafür anstelle einer Sub eine Function und gebe als Returnwert die Erro.Number zurück. Damit bist du frei in Test() alles zu tun, was du möchtest.
Gruß, Arthur

AW: zu Spungmarke in anderem Modul springen
08.08.2014 15:36:59
Nepumuk
Hallo,
im Prinzip könntest du das so machen:
Sub Test()
    Dim zaehler As Integer
    Dim nenner As Integer
    
    'code
    
    'Aufruf der Prozedur in Modul 1 mit übergabe der werte von zähler und nenner
    If Modul1.teilen(zaehler, nenner) Then
        
        'code
        
    End If
    'code
    
End Sub
Public Function teilen(zaehler As Integer, nenner As Integer) As Boolean
    Dim ergebnis As Integer
    
    On Error GoTo err_exit
    ergebnis = zaehler / nenner
    teilen = True
    err_exit:
End Function

Oder du schleifst den Fehler in die Hauptroutine durch. Denn du willst ja wahrscheinlich nicht nur zum testen teilen, sondern du willst auch das Ergebnis zurück bekommen.
Sub Test()
    Dim zaehler As Integer
    Dim nenner As Integer
    Dim ergebniss As Integer
    
    On Error GoTo err_exit
    
    'code
    
    'Aufruf der Prozedur in Modul 1 mit übergabe der werte von zähler und nenner
    
    On Error GoTo Notausgang
    
    ergebniss = Modul1.teilen(zaehler, nenner)
    
    On Error GoTo err_exit
    
    'code
    
    Notausgang:
    
    On Error GoTo err_exit
    
    'code
    
    err_exit:
End Sub
Public Function teilen(zaehler As Integer, nenner As Integer) As Integer
    teilen = zaehler / nenner
End Function

Gruß
Nepumuk
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Sprungmarken in Excel VBA: So springst du zwischen Modulen


Schritt-für-Schritt-Anleitung

  1. Modularisierung des Codes: Beginne damit, deinen Code in Module zu strukturieren. Du kannst Subroutinen in verschiedene Module auslagern, um die Übersichtlichkeit zu erhöhen.

  2. Fehlerbehandlung implementieren: Anstelle von Sprungmarken in einem anderen Modul empfehle ich, Fehlerbehandlungsfunktionen zu verwenden. Du kannst das mit einer Funktion erreichen, die einen Boolean-Wert zurückgibt.

    Beispiel:

    Public Function teilen(zaehler As Integer, nenner As Integer) As Boolean
       On Error GoTo err_exit
       teilen = True
       Dim ergebnis As Integer
       ergebnis = zaehler / nenner
       Exit Function
    err_exit:
       teilen = False
    End Function
  3. Aufruf der Funktion: In deiner Hauptprozedur (z.B. Test) kannst du dann die Funktion teilen aufrufen und den Rückgabewert überprüfen:

    Sub Test()
       Dim zaehler As Integer
       Dim nenner As Integer
       If Not Modul1.teilen(zaehler, nenner) Then
           ' Fehlerbehandlung hier
       End If
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Typ-oder Definitionsfehler": Stelle sicher, dass alle Variablen korrekt deklariert sind. Überprüfe, ob die Variablen in der Funktion und der Subroutine übereinstimmen.

  • Fehler: "Division durch Null": Achte darauf, dass der Nenner einen Wert ungleich Null hat, bevor du die Division durchführst. Verwende eine If-Bedingung, um dies zu überprüfen.


Alternative Methoden

Eine weitere Methode zur Fehlerbehandlung besteht darin, mit On Error GoTo zu arbeiten, um zu einem Fehlerbehandlungslabel zu springen. Diese Technik ist jedoch weniger übersichtlich als die Verwendung von Rückgabewerten und kann zu komplexeren Codes führen.

Beispiel:

Sub Test()
    On Error GoTo Fehler
    ' Code hier
    Exit Sub
Fehler:
    ' Fehlerbehandlung hier
End Sub

Praktische Beispiele

Hier ist ein vollständiges Beispiel, wie du die Methode zur Fehlerbehandlung in einem Modul nutzen kannst:

Sub Test()
    Dim zaehler As Integer
    Dim nenner As Integer
    ' Werte setzen
    zaehler = 10
    nenner = 0 ' Dies wird einen Fehler verursachen

    If Not Modul1.teilen(zaehler, nenner) Then
        MsgBox "Fehler: Division durch Null!"
    End If
End Sub

Public Function teilen(zaehler As Integer, nenner As Integer) As Boolean
    On Error GoTo err_exit
    teilen = True
    Dim ergebnis As Integer
    ergebnis = zaehler / nenner
    Exit Function
err_exit:
    teilen = False
End Function

Tipps für Profis

  • Verwende Debugging: Nutze die Debugging-Tools von Excel VBA, um Fehler schnell zu identifizieren.
  • Code-Kommentare: Kommentiere deinen Code gut. So bleibt er auch für andere verständlich.
  • Modularisierung: Halte deine Module übersichtlich. Wenn ein Modul zu groß wird, ziehe in Betracht, es weiter aufzuteilen.

FAQ: Häufige Fragen

1. Kann ich direkt zu einer Sprungmarke in einem anderen Modul springen? Nein, das ist nicht möglich. Verwende stattdessen Funktionen und Rückgabewerte zur Fehlerbehandlung.

2. Wie kann ich Fehler in Excel VBA effizient behandeln? Nutze die On Error-Anweisung in Kombination mit Rückgabewerten oder Fehlerbehandlungslabels in der Hauptprozedur.

3. Ist es besser, Subroutinen oder Funktionen zu verwenden? Funktionen sind oft flexibler, da sie Werte zurückgeben können. Subroutinen eignen sich jedoch gut für Aufgaben, die keine Rückgabewerte benötigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige