Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Laufzeitfehler 5 - ungültiger Prozeduraufruf

Laufzeitfehler 5 - ungültiger Prozeduraufruf
31.07.2016 23:49:59
Torben
Liebes Herber-Forum,
ich schreibe zurzeit meine Bachelorthesis im finanzmathematischen Bereich und schreibe - mit meinen geringen VBA Kenntnissen - Simulationsprogramme, die mir meine umfangreichen Rechnungen abnehmen.
Bis hierhin konnte ich auch sämtliche Probleme mit den bereits bestehenden Beiträgen lösen, doch bin nun auf einen für mich unerklärlichen Fehler gestoßen.
Hier der Code:
Sub Clayton() 'Deklaration Dim Z As Byte Dim j, i, k1, k2 As Byte Dim Par(1 To 30, 1 To 30), v1, v2 As Double Dim C As Double Dim u As Integer 'Einlesen 'Größe der Stichprobe Z = 198 'Parameter For j = 1 To 30 For i = j + 1 To 30 Par(i, j) = Workbooks("Parameterschätzung.xlsm").Sheets("Par Clayton").Cells(i + 1, j + _ 1) Next i Next j 'Schleife u = 3 For j = 1 To 30 For i = j + 1 To 30 For k1 = 1 To Z For k2 = 1 To Z v1 = (k1 / Z) ^ (-Par(i, j)) v2 = (k2 / Z) ^ (-Par(i, j)) C = Application.WorksheetFunction.Max((v1 + v2 - 1) ^ (-(1 / Par(i, j))), 0) Worksheets("Clayton").Cells((k1 - 1) * Z + k2 + 1, u) = C 'Ausgabe Next k2 Next k1 u = u + 1 Next i Next j End

Sub 'Clayton
Die Schleife berechnet also für sämtliche Kombinationen der Variablen i,j,k1 und k2 einen  _
konkreten Wert C und schreibt diesen Wert auf das Tabellenblatt "Clayton". Diese Rechnung beruht auf einem konkreten Parameter "Par(i,j)", den ich in einem separaten Programm berechnet habe.
Bei den folgenden Werten der Variablen erhalte ich aber "Laufzeitfehler 5: ungültiger  _
Prozeduraufruf oder ungültiges Argument":
j = 18
i = 22
k1 = 1
k2 = 1
Par(i,j) = -0,1795 (ungefähr)
Bis dahin läuft das Programm problemlos und die Ergebnisse sind (nach stichprobenartiger Überprü _
fung) auch korrekt.
An dieser Stelle sollte das Ergebnis ca. 2,51768 * 10^-4 betragen. Einen mathematischen Fehler  _
konnte ich hier in der Formel nicht finden und meine VBA-Kenntnisse sind leider in der Fehlersuche ausgezählt.
Ich freue mich über sämtliche Hinweise und Lösungsansätze.
Rückfragen beantworte ich natürlich gern und hoffe, dass die Beschreibung des Problems soweit  _
ausreichend ist (ohne in die mathematischen Details zu gehen :)).


		
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 5 - ungültiger Prozeduraufruf
01.08.2016 05:57:33
fcs
Hallo Torben,
als erstes solltes du die Deklaration der Variablen anpassen.
Die " As ...." anweisung muss hinter jeder Variablen stehen, wenn gewünscht. Ansonsten werden die Variablen als Variant angenommen.
'Deklaration
Dim Z As Byte
Dim j As Byte, i As Byte, k1 As Byte, k2 As Byte
Dim Par(1 To 30, 1 To 30) As Double, v1 As Double, v2 As Double
Dim C As Double
Dim u As Integer

Probleme gibt es, wenn (v1+v2-1) negative Werte liefert. Dann funktioniert die Potenz-Rechnung nicht immer.
Gruß
Franz
 AB
7v1 = (k1 / Z) ^ (-Par(i, j))0,387033537
8v2 = (k2 / Z) ^ (-Par(i, j))0,387033537
9C = Max((v1 + v2 - 1) ^ (-(1 / Par(i, j))), 0)#ZAHL!
10  
11Z198
12j = 1818
13i = 2222
14k1 = 11
15k2 = 11
16Par(i,j) = -0,1795-0,1795

Formeln der Tabelle
ZelleFormel
B7=(B14/B11)^(-B16)
B8=(B15/B11)^(-B16)
B9=MAX((B7 + B8 - 1) ^ (-(1 / B16)); 0)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Anzeige
AW: Laufzeitfehler 5 - ungültiger Prozeduraufruf
01.08.2016 11:22:26
Torben
Besten Dank, Franz!
Das bringt schon enorm weiter! Jetzt arbeite ich nur an einem Fix :)
LG
Torben
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 5 - Ungültiger Prozeduraufruf in VBA beheben


Schritt-für-Schritt-Anleitung

  1. Variablen korrekt deklarieren: Achte darauf, dass jede Variable ordnungsgemäß deklariert ist. Verwende die As-Anweisung für jede Variable, um sicherzustellen, dass sie den richtigen Datentyp hat. Zum Beispiel:

    Dim j As Byte, i As Byte, k1 As Byte, k2 As Byte
  2. Fehler im Code identifizieren: Überprüfe die Berechnungen, die in den Schleifen durchgeführt werden. Ein typischer Grund für den laufzeitfehler 5 ist, dass negative Werte in einer Potenzberechnung auftreten. Stelle sicher, dass der Ausdruck (v1 + v2 - 1) niemals negativ ist.

  3. Debugging nutzen: Setze Haltepunkte in deinem VBA-Code, um die Werte von v1, v2 und Par(i,j) zu überwachen, bevor der Fehler auftritt. Dies hilft dir zu verstehen, warum der Fehler auftritt.

  4. Anpassen der Berechnung: Falls negative Werte auftreten, kannst du die Berechnung anpassen, um sicherzustellen, dass die Potenzierung immer mit einem gültigen Argument erfolgt. Eine Möglichkeit wäre, sicherzustellen, dass der Wert mindestens 0 ist:

    C = Application.WorksheetFunction.Max((v1 + v2 - 1) ^ (-(1 / Par(i, j))), 0)

Häufige Fehler und Lösungen

  • Laufzeitfehler 5: ungültiger Prozeduraufruf: Dieser Fehler tritt häufig auf, wenn die Funktion mit ungültigen Argumenten aufgerufen wird. Überprüfe deine Eingabewerte und stelle sicher, dass sie im erwarteten Bereich liegen.

  • Negative Werte in Berechnungen: Wenn (v1 + v2 - 1) negativ wird, kann das zu einem Fehler führen. Du kannst eine einfache If-Bedingung hinzufügen, um sicherzustellen, dass dieser Fall nicht eintritt.


Alternative Methoden

  • Fehlerbehandlung in VBA: Implementiere eine Fehlerbehandlungsroutine, um den Code robuster zu machen. Nutze dazu die On Error-Anweisung:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Verwendung von Excel-Funktionen: Anstelle von VBA kannst du auch Excel-Funktionen verwenden, um ähnliche Berechnungen durchzuführen, falls dies sinnvoll ist.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du den laufzeitfehler 5 vermeiden kannst:

Sub BeispielBerechnung()
    Dim Z As Byte
    Dim i As Integer
    Dim Ergebnis As Double

    Z = 10
    For i = 1 To Z
        Ergebnis = Application.WorksheetFunction.Max((i / Z) ^ -1, 0)
        Debug.Print Ergebnis
    Next i
End Sub

In diesem Beispiel wird sichergestellt, dass die Potenzierung immer mit einem nicht-negativen Wert erfolgt.


Tipps für Profis

  • Verwende die Debug.Print-Anweisung, um Werte während der Ausführung deines Codes zu überprüfen. Dies hilft dir, Probleme schnell zu identifizieren.

  • Optimiere deine Schleifen: Reduziere die Anzahl der Iterationen oder die Komplexität der Berechnungen, um die Ausführung des Codes zu beschleunigen und potenzielle Fehlerquellen zu minimieren.


FAQ: Häufige Fragen

1. Was verursacht den Laufzeitfehler 5?
Der Laufzeitfehler 5 tritt normalerweise auf, wenn eine Funktion mit ungültigen Argumenten aufgerufen wird oder wenn eine Berechnung eine unerwartete Eingabe erhält.

2. Wie kann ich Laufzeitfehler in VBA vermeiden?
Um Laufzeitfehler zu vermeiden, stelle sicher, dass alle Werte, die in Berechnungen verwendet werden, den erwarteten Bereich und Datentyp haben. Nutze auch Fehlerbehandlungsroutinen, um unerwartete Probleme zu verwalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige