Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1144to1148
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
Inhaltsverzeichnis

Fehler beim Kompilieren - Benutzerdefinierter Typ

Fehler beim Kompilieren - Benutzerdefinierter Typ
Himmelsbach
Hallo zusammen,
Leider habe ich keine Ahnung von VBA und soll nichts desto trotz eine aus meiner Sicht anspruchsvolle Logik programmieren.
Da eine reine textuelle Beschreibung nicht sonderlich hilfreich wäre, habe ich die Excelmappe beigelegt.
Jetzt aber zu meinem Problem:
Im Tabellenblatt "Testdatensätze VB" möchte ich in der Zelle "AO3" eine Funktion hinterlegen, die mir eine neu berechnete Ratingnote ausgibt. Die Logik dazu habe ich versucht im Modul "changeRatingMoodys" darzustellen.
Die weiteren Eingangswerte für die Funktionen finden sich auf unterschieldlichen Tabellenblättern:
- Rating aus BoniStufeRating = Tabellenblatt "Testdatensätze VB", Zelle "S3"
- Abgleichsvariable Schluessel = Tabellenblatt "Testdatensätze VB", Zelle "H3"
- Ratinggrenze = Zuweisung eines Bereichs RatSt_Moodys_Rating, Tabellenblatt "Parametrisierung VB", Zelle "K3"
- ansonsten habe ich mich bemüht, den Code möglichst verständlich zu kommentieren, dass nachvollzogen werden kann aus welchen Bereichen ich die Informationen beziehen möchte
Leider finde ich weder die genaue Ursache meines Fehlers, noch ob die bisher programmierte Logik so überhaupt in Excel machbar ist. Mit Bücher lesen und googeln komme ich an dieser Stelle nicht mehr wirklich weiter.
Mappe: https://www.herber.de/bbs/user/68517.xlsm
Wäre für jede Hilfe sehr dankbar.
Viele Grüße
Susanne

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

Betreff
Benutzer
Anzeige
AW: Fehler beim Kompilieren - Benutzerdefinierter Typ
11.03.2010 19:06:04
Nepumuk
Hi,
Hier sind die Variablenbezeichnung falsch:
Public Function CalculateChangeRating(BoniStufeRating As Variant, readnotchbesser As Variant,  _
readnotchschlechter As Variant, grenze As varinat) As Variant

Public Function RGW(Rating As varinat, Sen As Variant, Gran As Variant, Ansatz As  _
Variant)

Public Function RGW(Rating As varinat, Sen As Variant, Ansatz As Variant)
Hier hast du den falschen Funktionsnamen benutzt:

Public Function BoniStufeRating(Rating As Variant) As Variant
If IsNull(Rating) Then
BoniStufeMoodys = 0
Else
Hier fehlt die Dim-Anweisung und in der Funktion ist eine Variable deklariert, welche den  _
selben Namen hat wie die Funktion selbst:

Public Function readnotchbesser(schluessel As Variant)
Dim sarray As Variant       'Array
Dim iindex As Integer       'Zähler für Indes
Dim icells As Integer       'Anzahl Zellen
Dim icolumns As Integer     'Anzahl Spalten
Dim irows As Integer        'Anzahl Zeilen
Dim irow As Integer         'Zähler Zeilen
Dim icol As Integer         'Zähler Spalten
srange As String            'Range
Dim i As Integer
i = 1
Dim readnotchbesser As Variant
Hier fehlt vor den 2. If ein Else:

Public Function CalculateChangeRating(BoniStufeRating As Variant, readnotchbesser As Variant,  _
readnotchschlechter As Variant, grenze As Variant) As Variant
If BoniStufeRating If BoniStufeRating > grenze Then
changeRating = BoniStufeRating + readnotchschlechter
Else
MsgBox "Es ist ein Fehler aufgetreten."
End If
End Function
Hier willst du einer Funktion mit = einen Wert zuweisen:
Public Function NewRatingnote(changeRatinng As Variant) As Variant
If IsNull(changeRatinng) Then
AblRatingnote = "NR"
Else
Hier hast du wieder eine Variable die den selben Namen hat wie die Funktion, außerdem gibt  _
es die Funktion zweimal:

Public Function Ansatz(Ansatz As Variant) As Variant
In dieser Prozedur fehlt mindesten If

Public Function Risikogewicht(Rating As Variant, Sen As Variant, Gran As Variant, Ansatz As  _
Variant) As Variant
~f~
Ich denke, das reicht erst mal. Der Code strotzt nur so von Fehlern. Klick in der Menüleiste  _
auf "Debuggen" - Kompilieren VBA-Projekt. So kommst du zumindest hinter die größten Schnitzer.
Gruß
Nepumuk

Anzeige
AW: Fehler beim Kompilieren - Benutzerdefinierter Typ
15.03.2010 17:18:24
Himmelsbach
Hallo,
Vielen Dank für die Hinweise, hat mir schon sehr weitergeholfen. Ich glaub die groben Sachen sollte ich nun auch gefunden haben, leider hänge ich noch bei folgender Funktion:
Public Function readnotchbesser(schluessel As Variant)
Dim sarray As Variant       'Array
Dim iindex As Integer       'Zähler für Indes
Dim icells As Integer       'Anzahl Zellen
Dim icolumns As Integer     'Anzahl Spalten
Dim irows As Integer        'Anzahl Zeilen
Dim irow As Integer         'Zähler Zeilen
Dim icol As Integer         'Zähler Spalten
Dim srange As Range            'Range
Dim i As Single
i = 1
'Dim besser_notch As Variant
Set srange = Range("RatSt_Moodys_besser")
' Zellenzahl ermitteln
icells = Range("RatSt_Moodys_besser").Cells.Count
Debug.Print icells
' Spalten-/Zeilenzahl ermitteln
icolumns = Range("RatSt_Moodys_besser").Columns.Count
irows = Range("RatSt_Moodys_besser").Rows.Count
Debug.Print icolumns
Debug.Print irows
' Array über redim dimensionieren
ReDim sarray(icells - 1)
' Werte des Breichs in das Array einlesen
For icol = 1 To icolumns
For irow = 1 To irows
sarray(iindex) = srange
iindex = iindex + 1
Next
Next
Debug.Print iindex
'Abgleich eingelesener Schlüssel mit
Do Until RatSt_Moodys_besser.Range(1 & i) = schluessel
i = i + 1
Loop
Debug.Print i
readnotchbesser = Range(icolumns & i).Cells.value
Debug.Print readnotchbesser
End Function
Hier erhalte ich bei der fett markierten Zeile die Fehlermeldung: Laufzeitfehler 424: Objekt erforderlich.
An dieser Stelle würde ich sehr gerne den eingelesenen Wert mit dem Bereich "RatSt_Moodys_besser" abgleichen und wenn dieser gefunden wurde, die Zeilenzahl in i merken, um dann als Ausgabewert den Zelleninhalt aus der letzter Spalte des Bereichs und der ermittelten Zeile (i) auszugeben.
Vielen Dank für Eure Hilfe.
Grüße
Susanne
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige