ich habe eine Function geschrieben (mit Function name()as Double eröffnet und mit End Function geschlossen). Doch beim Ausführen kommt die Fehlermeldung: Function oder Sub nicht definiert!
Weiß jemand woran das liegt??
Vielen Dank
Conny
kann es sein, dass Du das Teil in einem Klassen-, nicht einem Standardmodul abgelegt hast?
hans
hans
warum postest Du nicht mal den Code und den Aufruf der Function ?
Gruß Otto
Function EigeneFunktion() As Double
b = ActiveCell.Row
If (b >= 16 And b <= 116) Then
xWert = Range("A" & (b - 50) & ":A" & (b + 50))
yWert = Range("B" & (b - 50) & ":B" & (b + 50))
If (b >= 41 And b <= 91) Then
xWert = Range("A" & (b - 25) & ":A" & (b + 25))
yWert = Range("B" & (b - 25) & ":B" & (b + 25))
If (b >= 54 And b <= 78) Then
xWert = Range("A" & (b - 12) & ":A" & (b + 12))
yWert = Range("B" & (b - 12) & ":B" & (b + 12))
If (b >= 60 And b <= 72) Then
xWert = Range("A" & (b - 6) & ":A" & (b + 6))
yWert = Range("B" & (b - 6) & ":B" & (b + 6))
If (b >= 63 And b <= 69) Then
xWert = Range("A" & (b - 3) & ":A" & (b + 3))
yWert = Range("B" & (b - 3) & ":B" & (b + 3))
If (b >= 65 And b <= 67) Then
xWert = Range("A" & (b - 1) & ":A" & (b + 1))
yWert = Range("B" & (b - 1) & ":B" & (b + 1))
Steigung = WorksheetFunction.Slope(yWert, xWert)
Glättung = Worksheets(1).Cells(1, 1).Value
Ergebnis = Abs(Steigung)
If Ergebnis < 16 Then
If Ergebnis < 32 Then Ergebnis = Abs(Steigung)
Else: Ergebnis = Steigung
End If
End If
rng.Value = Round(rng.Value * 1.95583, 6)
EigeneFunktion = Ergebnis
End Function
in einer Zelle in Excel ruf ich dann "=EigeneFunktion()" auf
auf den ersten Blick:
Das liegt an dem Round. Das ist kein VBA-Befehl, sondern eine WorksheetFunction.
Es muss so heißen:
rng.Value = WorksheetFunction.Round(rng.Value * 1.95583, 6)
Aber auch danach dürft der Code nicht laufen. Und musst die ganzen Ifs noch schließen.
Gruß
Jürgen
1. arbeite mit Dim um die Variablen bestimmen
2. Es fehlen einige "End IF"
Starte mal den Debug und probiere es
Gruß Otto
Hier der Code:
If b >= 66 And Abs(Steigung1) < Glättung Then
Ergebnis = Abs(Steigung1)
ElseIf b >= 41 And Abs(Steigung2) < 2 * Glättung Then
Ergebnis = Abs(Steigung2)
ElseIf b >= 54 And Abs(Steigung3) < 4 * Glättung Then
Ergebnis = Abs(Steigung3)
ElseIf b >= 60 And Abs(Steigung4) < 8 * Glättung Then
Ergebnis = Abs(Steigung4)
ElseIf b >= 63 And Abs(Steigung5) < 16 * Glättung Then
Ergebnis = Abs(Steigung5)
ElseIf b >= 65 And Abs(Steigung6) < 32 * Glättung Then
Ergebnis = Abs(Steigung6)
Else: Ergebnis = Steigung
End If
End If
End If
End If
End If
End If
schließe doch nur meine zuvor geöffneten ifs!?
riskier mal einen blick in die hilfe zu If und ElseIf.
Gruß
Jürgen
Überprüfe das Modul: Stelle sicher, dass deine Funktion oder Sub in einem Standardmodul und nicht in einem Klassenmodul abgelegt ist. Dies kann oft die Ursache für den Fehler "sub oder function nicht definiert" sein.
Code überprüfen: Achte darauf, dass der Code korrekt ist. Hier ein einfaches Beispiel für eine Funktion:
Function BeispielFunktion() As Double
BeispielFunktion = 42
End Function
Richtige Deklaration: Stelle sicher, dass die Funktion nicht als Private
deklariert ist, wenn du sie aus einem anderen Modul aufrufen möchtest.
Variablen definieren: Nutze Dim
, um Variablen in deinem Code zu deklarieren. Unzureichend definierte Variablen können ebenfalls zu einem Fehler beim Kompilieren führen.
Debuggen: Starte den Debugger in Excel VBA, um den Code Zeile für Zeile durchzugehen. Dies hilft dir, Fehler schneller zu finden.
Fehler: "Function oder Sub nicht definiert":
Fehler: "End If ohne If-Block":
If
-Befehl ein entsprechendes End If
hat. Nutze Einrückungen, um die Struktur klarer zu machen.Fehler: "Fehler beim Kompilieren":
Wenn du beim Arbeiten mit Funktionen in Excel VBA auf Probleme stößt, gibt es alternative Ansätze:
Verwende Subs statt Functions: Manchmal kann es sinnvoll sein, eine Sub-Prozedur zu verwenden, wenn du keine Rückgabewerte benötigst. Beispiel:
Sub BeispielSub()
MsgBox "Hallo Welt"
End Sub
Excel-Funktionen verwenden: In vielen Fällen kannst du auch eingebaute Excel-Funktionen direkt in den Zellen verwenden, ohne VBA zu nutzen.
Hier sind einige Beispiele, wie du Funktionen korrekt definierst und aufrufst:
Einfache Funktion:
Function AddiereZweiZahlen(a As Double, b As Double) As Double
AddiereZweiZahlen = a + b
End Function
Aufruf in Excel: =AddiereZweiZahlen(5, 10)
Funktion mit Fehlerbehandlung:
Function SicherDividieren(a As Double, b As Double) As Variant
If b = 0 Then
SicherDividieren = "Fehler: Division durch Null"
Else
SicherDividieren = a / b
End If
End Function
Aufruf in Excel: =SicherDividieren(10, 0)
Verwende Option Explicit
: Füge dies am Anfang deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert werden müssen. Dies hilft, Fehler zu vermeiden.
Strukturierte Programmierung: Halte deinen Code sauber und strukturiert, um die Lesbarkeit und Wartbarkeit zu verbessern.
Benennungskonventionen: Verwende klare und konsistente Namen für Funktionen und Variablen, um Klarheit zu schaffen.
1. Was bedeutet "sub oder function nicht definiert"? Diese Fehlermeldung tritt auf, wenn VBA die angegebene Funktion oder Sub nicht finden kann. Dies kann an einem falschen Modul oder einem Konflikt mit einem anderen Namen liegen.
2. Wie kann ich sicherstellen, dass meine Funktion funktioniert? Überprüfe, ob die Funktion im richtigen Modul ist, die Variablen deklariert sind und die Syntax korrekt ist. Nutze den Debugger, um Fehler zu finden.
3. Was sind die Unterschiede zwischen Sub und Function in VBA?
Eine Function
gibt einen Wert zurück, während eine Sub
keine Rückgabewerte hat. Verwende Function
, wenn du einen Wert benötigst, und Sub
für Aktionen, die keinen Rückgabewert erfordern.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen