Anzeige
Archiv - Navigation
1944to1948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anwendungs- oder Objektdefinierter Fehler
18.09.2023 16:19:57
Niels599
Hallo liebe Mitglieder:innen :)

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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anwendungs- oder Objektdefinierter Fehler
18.09.2023 18:11:19
Ulf
Hi Niels
Setze mal regelmässig


Debug.Print Application.CalculationState

der ändert sich mit Eintritt in eine Funktion von 0 auf 1, ab da muß das Blatt unverändert bleiben, bis Austritt Funktion.
Eine auf Worksheet-Ebene aufgerufene Funktion darf keine Änderungen anderer als der funktionsbezogenen ausführen.
hth
Ulf
AW: Anwendungs- oder Objektdefinierter Fehler
18.09.2023 18:24:13
daniel
Hi


in einem Makro verwendet, gibt es keinen Unterschied zwischen SubProzedur und Function, hier haben beide die selben Rechte und Möglichkeiten, Eine Function ist das gleiche wie eine Sub + Rückgabewert.
In einer Formel jedoch ist die Function auf das Ausgeben des Rückgabewertes beschränkt.
Funktionen, die in Formeln in Zellen verwendet werden, dürfen nur ihr Ergebnis zurückgeben und ansonsten keine "Außenwirkung" auf andere Zellen haben. So hat Microsoft das vorgesehen (wahrscheinlich haben sie irgendwelche Probleme befürchtet, wenn sie das zulassen)
Gruß Daniel
Anzeige
AW: Anwendungs- oder Objektdefinierter Fehler
19.09.2023 09:26:32
Niels599
Vielen Dank für eure Hilfe!
Schade, dass Excel das nicht vorsieht.

Ich habe mir jetzt ein Makro gebaut, welches sich listenweise durch die Daten arbeitet, funktioniert so wie es soll und wie ich es eigentlich mit der Funktion vorhatte.

Nochmals vielen Dank für eure Bemühungen.
Niels

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige