Else wird in IF-Funktion nicht ausgeführt
#1
Hallo,

bei mir wird das Else in der IF-Funktion nicht ausgeführt. Habe es auch mit elseif oder einer neuen IF-Funktion probiert aber es führt es einfach nicht aus. liegt vllt an der doppelschleife.

Einmal der ganze Code und einmal der Codebereich um den es geht. Kann innerhalb des Codetags nichts farbig markieren.

Code:
For j1 = ErstebefüllteZelle To LetztebefüllteZelle
For j2 = 9 To LetzteZeile
If Month(.Cells(j2, 14)) = Month(.Cells(7, j1)) And year(.Cells(j2, 14)) = year(.Cells(7, j1)) Then
.Cells(4, j1) = .Cells(j2, ErstebefüllteZelle)
Else
.Cells(4, j1) = "#NV"

End If
Next j2
Next j1
Code:
Sub DiagrammMeilenstein()
Dim LetzteZeile As Long, d As Integer
Dim loLetzte As Long, raFund As Range, raFund1 As Range, ErstebefüllteZelle As Long, LetztebefüllteZelle As Long
Dim i As Long, z As Long, j1 As Long, j2 As Long

'Startzeile Ergebnis
z = 2

'Blattname anpassen
With Worksheets("Meilensteintrendanalyse")
ActiveSheet.Unprotect
Sheets("Frontend").Unprotect
   loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
   For i = 6 To 6
       Set raFund = .Rows(i).Find(what:=1, after:=.Cells(i, 1), LookIn:=xlValues, lookat:=xlWhole, _
       searchorder:=xlByColumns, searchdirection:=xlNext)
       Set raFund1 = .Rows(i).Find(what:=1, LookIn:=xlValues, lookat:=xlWhole, _
       searchorder:=xlByColumns, searchdirection:=xlPrevious)
       If Not raFund Is Nothing Then
         
           ErstebefüllteZelle = raFund.Column
           LetztebefüllteZelle = raFund1.Column
           z = z + 1
       End If
   Next i

       
Set raFund = Nothing: Set raFund1 = Nothing

For j1 = ErstebefüllteZelle To LetztebefüllteZelle
For j2 = 9 To LetzteZeile
If Month(.Cells(j2, 14)) = Month(.Cells(7, j1)) And year(.Cells(j2, 14)) = year(.Cells(7, j1)) Then
.Cells(4, j1) = .Cells(j2, ErstebefüllteZelle)
Else
.Cells(4, j1) = "#NV"

End If
Next j2
Next j1

   LetzteZeile = .Cells(Rows.Count, 3).End(xlUp).Row
    Sheets("Frontend").ChartObjects("Diagramm Meilensteintrendanalyse").Activate
ActiveChart.SeriesCollection.NewSeries
     ActiveChart.FullSeriesCollection(1).name = "Planlinie"
     ActiveChart.FullSeriesCollection(1).XValues = .Range(.Cells(4, ErstebefüllteZelle), .Cells(4, LetztebefüllteZelle))
     ActiveChart.FullSeriesCollection(1).Values = .Range(.Cells(4, ErstebefüllteZelle), .Cells(4, LetztebefüllteZelle))
     ActiveChart.FullSeriesCollection(1).ApplyDataLabels
     ActiveChart.FullSeriesCollection(1).DataLabels.Delete
     
   Sheets("Frontend").ChartObjects("Diagramm Meilensteintrendanalyse").Activate
   For i = 9 To LetzteZeile
     ActiveChart.SeriesCollection.NewSeries
     ActiveChart.FullSeriesCollection(i - 7).name = .Cells(i, 6).Value
     ActiveChart.FullSeriesCollection(i - 7).XValues = .Range(.Cells(7, ErstebefüllteZelle), .Cells(7, LetztebefüllteZelle))
     ActiveChart.FullSeriesCollection(i - 7).Values = .Range(.Cells(i, ErstebefüllteZelle), .Cells(i, LetztebefüllteZelle))
     ActiveChart.FullSeriesCollection(i - 7).Points(1).Select
     ActiveChart.FullSeriesCollection(i - 7).Points(1).ApplyDataLabels
     ActiveChart.FullSeriesCollection(i - 7).Points(1).DataLabel.Select
     Selection.ShowSeriesName = -1
     Selection.ShowValue = 0
     Selection.Left = 233.218
     
        ActiveChart.FullSeriesCollection(i - 7).DataLabels.Select
   ActiveChart.FullSeriesCollection(i - 7).Points(1).DataLabel.Select
   Selection.Format.TextFrame2.TextRange.Font.Size = 28
   Selection.Format.TextFrame2.TextRange.Font.Bold = msoFalse
   Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
 
 
   With ActiveChart.FullSeriesCollection(i - 7).Format.Line
       .Visible = msoTrue
       .Weight = 6
   End With
   Next i
   ActiveChart.Axes(xlValue).MinimumScale = .Cells(7, ErstebefüllteZelle).Value
   ActiveChart.Axes(xlValue).MajorUnit = 92
   ActiveChart.Axes(xlCategory).MinimumScale = .Cells(7, ErstebefüllteZelle - 1).Value
   ActiveSheet.Protect
   Sheets("Frontend").Protect
End With
End Sub
Top
#2
Hi,

Vorschlag:
Schau manuell ab welcher Zeile das vorkommen müsste, stoppe den Code an besagter Stelle und schau ins Lokale Anzeigefenster, welche Werte Deine If-Anweisung auswertet.
[-] Folgende(r) 1 Nutzer sagt Danke an Mase für diesen Beitrag:
  • stchwint
Top
#3
Hi

Zitat:bei mir wird das Else in der IF-Funktion nicht ausgeführt.

??? nicht ausgeführt im Sinne von.

1.
Ich habe einen Haltepunkt in der Zeile
Code:
.Cells(4, j1) = "#NV"
aber bei Code Ablauf wird nie in diese Zeile gesprungen.

2.
Der Code springt zwar in die Zeile aber das Ergebnis ist nicht dass was ich erwarte.



Möglichkeiten:
Bei 1. dann sind die Bedingngen eben immer wahr.
Code:
If Month(.Cells(j2, 14)) = Month(.Cells(7, j1)) And year(.Cells(j2, 14)) = year(.Cells(7, j1)) Then


Bei 2. in VBA wird #NV so angegeben "#N/A"


Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • stchwint
Top
#4
Auch Hallo,

es liegt an dieser Codezeile

Code:
For j2 = 9 To LetzteZeile

Du deklarierst LetzteZeile als Long, weißt der Variablen vor der Schleife aber keinen Wert zu, die hat aber als Inhalt ihren Initialwert 0 und somit wird die innere Schleife nicht durchgeführt. Die äußere j1-Schleife natürlich schon.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • stchwint
Top
#5
Dank euch.

Also es lag tatsächlich daran dass ich die variable LetzteZeile erst nach der Schleife definiert habe. Korrigiert habe ich dann aber dann nur #NV rausbekommen.

Lösung:

LetzteZeile vor der Schleife definieren.

und über Call noch diesen Code zwischenabrufen:

Code:
For i = ErstebefüllteZelle To LetztebefüllteZelle
If .Cells(4, i) = "" Then
.Cells(4, i) = "#N/A"
End If
Next i
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste