Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion

DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
31.10.2014 19:52:07
Florian
Hallo,
ich habe mir heute eine "kleine" Funktion in VBA geschrieben.
Sie sollte in Abhängigkeit von einem Anfangsdatum T1 und einem Enddatum T2 automatisch aus einer Tabelle (in einem anderen Tabellenblatt) zwei Werte auslesen. Die Zeilen dieser Tabelle sind nach "Anfangsdaten" untergliedert (,die T1 entsprechen sollen), wohingegen die Spalten dieser Tabelle in kategoriesierte Zeiträume untergliedert sind. In der Tabelle selbst stehen dann die benötigten Werte. Die beiden ermittelten Werte sollten abschließend - falls nötig - interpoliert werden.
Leider spuckt Excel bei Anwendung des Codes die Fehlermeldung #WERT! aus...Bräuchte bitte dringend Hilfe!
Hier der Code, vllt findet jemand meine/n Fehler:
Function MATCHING(ByVal T1 As Double, _
ByVal T2 As Double) As Double
' Dimensionierung der Hilfsvariablen
Dim x As Integer, _
y As Integer, _
i As Integer, _
j As Integer, _
T_l As Double, _
T_k As Double, _
r_l As Double, _
r_k As Double, _
Zeile As Double, _
lambda As Double, _
RLZ As Double, _
RLZ_year As Double
' Restlaufzeit in Tagen
RLZ = T2 - T1
' Restlaufzeit in Jahre
RLZ_year = Application.WooksheetFunction.YearFrac(T1, T2, 1)
' Falls Restlaufzeit 

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
31.10.2014 20:55:33
Luschi
Hallo Florian,
hier sind ein 2 kleine Fehler drin:
RLZ_year = Application.WooksheetFunction.YearFrac(T1, T2, 1) 'falsch
RLZ_year = Application.WorksheetFunction.YearFrac(T1, T2, 1) 'richtig
Dann benöigt die YearFrac-Funktion Datumswerte statt Double - also:
Function MATCHING(ByVal T1 As Date, ByVal T2 As Date) As Double
aus der vba-Online-Hilfe:
YEARFRAC(start_date, end_date, [basis])
The YEARFRAC function syntax has the following arguments:
Start_date Required. A date that represents the start date.
End_date Required. A date that represents the end date.
Basis Optional. The type of day count basis to use.
Dann mußt Du natürlich auch der MATCHING-Funktion Datumswerte übergeben.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
01.11.2014 13:37:15
Florian
Danke für den Hinweis!
Ich habe das nun gemacht, und zudem einen weiteren Fehler, nämlich die Korrektur von T_l und T_k angepasst. Es handelt sich hierbei nämlich auch um zwei Datumsangaben: Bei T_l bzw. T_k werden jeweils eine bestimmte Anzahl an Wochen bzw. Monate auf T1 addiert.
Leider klappt es immer noch nicht mit dem Code :-(
Als weiteren Hinweis: bei Sheets("Tabelle2").Range("A2:P373") handelt es sich auch um Datumsangaben, die mit dem Datumswert von T1 abgeglichen werden sollen.
Hier der "neue" Code:
Function MATCHING(ByVal T1 As Date, _
ByVal T2 As Date) As Double
' Dimensionierung der Hilfsvariablen
Dim x As Integer, _
y As Integer, _
i As Integer, _
j As Integer, _
T_l As Date, _
T_k As Date, _
r_l As Double, _
r_k As Double, _
Zeile As Double, _
lambda As Double, _
RLZ As Double, _
RLZ_year As Double
' Restlaufzeit in Tagen
RLZ = T2 - T1
' Restlaufzeit in Jahre
RLZ_year = Application.WorksheetFunction.YearFrac(T1, T2, 1)
' Falls Restlaufzeit 

Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
01.11.2014 16:15:00
Florian
... Habe nun am Ende des Codes noch einige kleine Veränderungen vorgenommen. Ich hoffe, es kann mir jemand kurz helfen:
Function MATCHING(ByVal T1 As Date, _
ByVal T2 As Date) As Double
' Dimensionierung der Hilfsvariablen
Dim x As Integer, _
y As Integer, _
i As Integer, _
j As Integer, _
T_l As Date, _
T_k As Date, _
r_l As Double, _
r_k As Double, _
Zeile As Double, _
lambda As Double, _
RLZ As Double, _
RLZ_year As Double
' Restlaufzeit in Tagen
RLZ = DateDiff("d", T1, T2)
' Restlaufzeit in Jahre
RLZ_year = Application.WorksheetFunction.YearFrac(T1, T2, 1)
' Falls Restlaufzeit 

Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
02.11.2014 09:57:40
Luschi
Hallo Florian,
hier noch eine kleine Änderung:
statt:
Zeile = Application.WorksheetFunction.Match(T1, Sheets("Tabelle2").Range("A2:A373"), 0)
so:
Zeile = Application.WorksheetFunction.Match(CLng(T1), Sheets("Tabelle2").Range("A2:A373"), 0)
Gruß von Luschi
aus klein-Paris

Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
03.11.2014 09:31:28
Florian
Vielen Dank für den Hinweis!
Es lag tatsächlich an der Anweisung "Zeile".
Ich habe es schließlich so gelöst, dass ich T1 als String-Variable T_1 definiert habe; so klappte es dann!
Vielen herzlichen Dank!

AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
03.11.2014 10:12:25
Luschi
Hallo Florian,
das hier "Ich habe es schließlich so gelöst, dass ich T1 als String-Variable T_1 definiert habe; so klappte es dann!" - verstehe ich nicht. Du solltest doch in der Match-Funktion nur T1 gegen Clng(T1) ändern, also
Zeile = Application.WorksheetFunction.Match(Clng(T1), Sheets("Tabelle2").Range("A2:A373"), 0)
Zeige doch mal als Code, was Du gemacht hast!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: DRINGEND!!! Fehlermeldung #WERT! bei VBA_Funktion
05.11.2014 09:22:31
Florian
Hi,
ich habe quasi das Problem schon gelöst, ehe ich Deine Antwort gelesen habe!
So, wie ich es jetzt gemacht habe, funktioniert es jedenfalls:
Dim T_1 As String
T_1 = T1
Arr = Worksheets("EURIBOR").Range("A1:A373")
Zeile = Application.WorksheetFunction.Match(T_1, Arr, 0)
Mat = Worksheets("EURIBOR").Range("A1:P373")
r_l = Application.WorksheetFunction.Index(Mat, Zeile, X)
r_k = Application.WorksheetFunction.Index(Mat, Zeile, y)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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