Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA-Code: Schleife wird nicht durchlaufen...

Betrifft: VBA-Code: Schleife wird nicht durchlaufen... von: Florian Müller
Geschrieben am: 21.11.2014 10:16:07

Hallo zusammen,

ich habe mir eine kleine Funktion in VBA geschrieben; hierbei soll eine Schleife durchlaufen werden, solange ein gewisses Datum vorliegt.
Während dieses Durchlaufs sollen, falls "bessere" Lösungen gefunden werden, diese jeweils gespeichert werden...Leider wird die Schleife nicht durchlaufen und als Fehler wird #WERT! in Excel zurückgegeben. Hat jemand Hilfe für mich, ich bräuchte dringendst eine Lösung!

Danke vorab!

Flo

Function TEST(ByVal T1 As String, _
                ByVal T2 As Date, _
                ByVal X As Double) As Double
    
    Dim Zelle As Variant
    Dim B As String
    Dim A As Double
    Dim T_alt As Date
    Dim X_alt As Double

    'Gleiches Datum suchen
    Set Zelle = Worksheets("Datenanalyse").Columns(3).Find(T1, lookat:=xlWhole, LookIn:= _
xlValues)
    MsgBox (Zelle.Address)
    
    'Initialisierung 
    T_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 8).Value
    X_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 4).Value
    A = Worksheets("Datenanalyse").Cells(Zelle.Row, 13).Value
    
    If Not Zelle Is Nothing Then
        
        Do
        
        ' Falls Kriterien für "T-" erfüllt und Annäherung an T2:
        If DateDiff("y", Worksheets("Datenanalyse").Cells(Zelle.Row, 8).Value, T2) >= 0 And  _
DateDiff("y", T_alt, Worksheets("Datenanalyse").Cells(Zelle.Row, 8).Value) >= 0 Then
            
            ' Falls Kriterien für "X-" erfüllt und Annäherung an X:
            If Worksheets("Datenanalyse").Cells(Zelle.Row, 4).Value <= X And Worksheets(" _
Datenanalyse").Cells(Zelle.Row, 4).Value > X_alt Then
                
                ' Dann neue "bessere" Lösung übernehmen!
                A = Worksheets("Datenanalyse").Cells(Zelle.Row, 13).Value
                T_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 8).Value
                X_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 4).Value
                
                ' Falls identisches Laufzeitende und identischer Strike, kann Schleife  _
verlassen werden!
                If DateDiff("d", Worksheets("Datenanalyse").Cells(Zelle.Row, 8), T2).Value = 0  _
And Worksheets("Datenanalyse").Cells(Zelle.Row, 4).Value = X Then
                    Exit Do
                End If
            
            End If
        
        End If
            
        ' Nächste Zeile durchsuchen:
        Set Zelle = Worksheets("Datenanalyse").Cells(Zelle.Row + 1, 3)
        
        
        ' Abbruch, wenn anderes Datum:
        MsgBox (Zelle.Address)
        Loop Until Worksheets("Datenanalyse").Cells(Zelle.Row, 3).Value <> Worksheets(" _
Datenanalyse").Cells(Zelle.Row - 1, 3).Value
        
    TEST = A
    
    Else
    TEST = -1
        
    End If
    
End Function

  

Betrifft: AW: VBA-Code: Schleife wird nicht durchlaufen... von: Daniel
Geschrieben am: 21.11.2014 10:50:20

Hi
Vermutlich ist dein Suchbegriff (T1) nicht im Suchbereich (Worksheets("Datenanalyse").Columns(3))
vorhanden.

damit wird in:

Set Zelle = Worksheets("Datenanalyse").Columns(3).Find(T1,...)

der der Variablen Zelle der Wert NOTHING zugewiesen, was im Folgecode dann zu einem Fehler führt, weil dieser mit dem Wert NOTHING nicht arbeiten kann:
   MsgBox (Zelle.Address)
    
    'Initialisierung 
    T_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 8).Value
    X_alt = Worksheets("Datenanalyse").Cells(Zelle.Row, 4).Value
    A = Worksheets("Datenanalyse").Cells(Zelle.Row, 13).Value
du hast die Sicherheitsabfrage
If Not Zelle Is Nothing Then

zwar drin, aber die ist falsch platziert und kommt zu spät.
Sie müsste eigentlich direkt nach dem .FIND erfolgen.

Gruß Daniel


  

Betrifft: AW: VBA-Code: Schleife wird nicht durchlaufen... von: Florian Müller
Geschrieben am: 21.11.2014 11:46:25

Hi Daniel,

Danke für den Hinweis!
Du hast recht! Aber daran ist es nicht gelegen (Der Wert wurde gefunden!)

Das Problem war, dass innerhalb der DateDiff-Funktionen auf .Value zurückgegriffen wurde!

Jetzt funktioniert es! Vielen Dank!


 

Beiträge aus den Excel-Beispielen zum Thema "VBA-Code: Schleife wird nicht durchlaufen..."