Vorab - ich bin recht frisch und unerfahren in VBA, also lasst bitte Gnade walten mit meinem Code ;)
Folgendes "Problem" möchte ich lösen:
Ich habe eine große Tabelle, aus der ich zwei Werte auslesen möchte: ein Kennzeichen und eine Jahreszahl. Diese würde ich gerne als Parameter in eine benutzerdefinierte Funktion eingeben und anschließend mein Ergebnis erhalten.
In der Funktion sollen die beiden Parameter verarbeitet werden. Das Kennzeichen soll in die Zelle B2 gesetzt werden (dort wird es weiterverarbeitet). Je nach Jahreszahl soll dann einer von drei Werten als Rückgabewert der auslösenden Funktion gegeben werden - soweit die Theorie.
Folgendes habe ich programmiert:
' Globale Variable, um das Ergebnis zwischen den Funktionen zu speichern
Dim Ergebnis As Variant
' Hauptfunktion, die von Excel-Zellen aufgerufen wird
Function callmain(Kennzeichen As String, Jahreszahl As Integer) As Variant
Call SetzeWert("OS AW 344")
' Hole den Wert basierend auf dem Kennzeichen und der Jahreszahl
Ergebnis = HoleWert(Kennzeichen, Jahreszahl)
' Gib das Ergebnis zurück an die Zelle, die die Funktion aufgerufen hat
callmain = Ergebnis
End Function
' Funktion, die den Wert basierend auf dem Kennzeichen und der Jahreszahl holt
Function HoleWert(KennZ As String, JahresZ As Integer) As Variant
Dim ws As Worksheet
Dim VergleichsZelle1 As Range, VergleichsZelle2 As Range, VergleichsZelle3 As Range
' Definiere die Vergleichszellen
Set VergleichsZelle1 = ThisWorkbook.Sheets("Neuberechnung JKK").Range("B5")
Set VergleichsZelle2 = ThisWorkbook.Sheets("Neuberechnung JKK").Range("C5")
Set VergleichsZelle3 = ThisWorkbook.Sheets("Neuberechnung JKK").Range("D5")
' Überprüfe die Jahreszahl und setze das Ergebnis entsprechend
If JahresZ >= VergleichsZelle1.Value And JahresZ VergleichsZelle2.Value Then
Ergebnis = ThisWorkbook.Sheets("Neuberechnung JKK").Range("B9").Value
ElseIf JahresZ >= VergleichsZelle2.Value And JahresZ VergleichsZelle3.Value Then
Ergebnis = ThisWorkbook.Sheets("Neuberechnung JKK").Range("C9").Value
ElseIf JahresZ >= VergleichsZelle3.Value And JahresZ 2051 Then
Ergebnis = ThisWorkbook.Sheets("Neuberechnung JKK").Range("D9").Value
Else
Ergebnis = "Jahreszahl entspricht keinem Fall"
End If
' Gib das Ergebnis zurück
HoleWert = Ergebnis
End Function
Sub SetzeWert(Zelle As String)
On Error GoTo ErrorHandler
' Setzt den Wert in der Zelle B2
ThisWorkbook.Sheets("Neuberechnung JKK").Range("B2").Value = Zelle
Exit Sub
ErrorHandler:
MsgBox "Fehler beim Setzen des Wertes in Zelle B2: " & Err.Description
End Sub
Das ist das Ergebnis vieler Versuche, den Fehler zu finden.
Das Problem taucht immer dann auf, wenn ich den Wert in eine Zelle setzen möchte (in diesem Fall in der Zeile
ThisWorkbook.Sheets("Neuberechnung JKK").Range("B2").Value = Zelle
.
ImDebug Modus Schritt-für-Schritt klappt alles bis zu diesme Zeitpunkt genau richtig.
Als ich den kompletten Ablauf außerdem nicht als Funktion, sondern als Makro "gestartet" habe, hat die komplette Funktion funktioniert.
Deshalb bin ich total verzweifelt, ich habe gefühlt alles versucht.
Ich hoffe, dass das soweit verständlich war,
vielen Dank im Voraus!
Niels