Hilfe: Codes vereinfachen: Loop?
Hi Leute
Ich habe folgendes "programmiert" ohne jemals VBA gelernt zu haben (also mit lesen + foren):
------
Public Function Wait(MilliSekunden As Double)
Dim I As Double, Ende As Double
Ende = Timer + (MilliSekunden / 10000)
Do While I < Ende
DoEvents
I = Timer
Loop
End Function
Private Sub Worksheet_calculate()
Wait 50000
If Range("H3").Value = "O" Then
If Range("J3").Value >= Range("I3").Value Then
MsgBox Range("K3")
End If
If Range("J3").Value >= Range("I3").Value Then
Range("J3").ClearContents
End If
ElseIf Range("H3").Value = "U" Then
If Range("J3").Value <= Range("I3").Value Then
MsgBox Range("K3")
End If
If Range("J3").Value <= Range("I3").Value Then
Range("J3").Value = "Ausgestoppt"
End If
End If
'Zeile4
If Range("H4").Value = "O" Then
If Range("J4").Value >= Range("I4").Value Then
MsgBox Range("K4")
End If
If Range("J4").Value >= Range("I4").Value Then
Range("J4").ClearContents
End If
ElseIf Range("H4").Value = "U" Then
If Range("J4").Value <= Range("I4").Value Then
MsgBox Range("K4")
End If
If Range("J4").Value <= Range("I4").Value Then
Range("J4").Value = "Ausgestoppt"
End If
End If
etc. etc. etc.
Wie kann ich das bis Zeile 50 machen? 50 mal CopyPaste??? Geht sicher einfacher!!! Mit Loop oder For Next hab ich es leider nicht hinbekommen!!
Die Wait Pause musste ich reintun da, bevor die RealTimekurse aus Bloomberg importiert werden, das ganze ständig Fehlermeldungen gibt!!
Antwort schreiben
Antwort 1 von nighty vom 15.12.2020, 08:06 Options
hi all
hier ein beispiel einer schleife
gruss nighty
For zaehler = 3 To 53
If Range("H" & zaehler).Value = "O" Then
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
Range("J" & zaehler).ClearContents
End If
ElseIf Range("H" & zaehler).Value = "U" Then
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
Range("J" & zaehler).Value = "Ausgestoppt"
End If
End If
Next zaehler
nicht zu vergessen die ereignisabschaltung,aufrufbar mit call Name,jeweils am anfang wie ende zu setzen
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Antwort 2 von nighty vom 15.12.2020, 08:17 Options
hi all
fuer die ereignisabschaltung war dies nur ein beispiel
gruss nighty
Antwort 3 von VBA-Rookie vom 16.12.2020, 14:59 Options
Vielen Dank Nighty. Genau das habe ich nicht hinbekommen, das mit dem ZAEHLER !!!¨Besten Dank.
Sorry, aber wofrür ist die Ereignisabshaltung? Braucht ich die hier? Das einzige was mir jetz noch fehlt ist das beim Excel-File-Start diese Calculation 5 sekunden wartet (also eigentlich erst beginnt wenn die Kurse aus dem Bloomberg anfangen= erscheinen....... sonst kommt immer ein Fehler bis alle Kurse ersichtlich sind)
So funktioniert es irgendwie nicht:
Private Function Wait(MilliSekunden As Double)
Dim I As Double, Ende As Double
Ende = Timer + (MilliSekunden / 10000)
Do While I < Ende
DoEvents
I = Timer
Loop
End Function
Private Sub Worksheet_calculate()
Wait 50000
For zaehler = 3 To 50
If Range("H" & zaehler).Value = "O" Then
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
Range("J" & zaehler).ClearContents
End If
ElseIf Range("H" & zaehler).Value = "U" Then
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
Range("J" & zaehler).Value = "Ausgestoppt"
End If
End If
Next zaehler
End Sub
So schon aber nur mit diesem Fehler zu beginn:
Private Sub Worksheet_calculate()
For zaehler = 3 To 50
If Range("H" & zaehler).Value = "O" Then
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value >= Range("I" & zaehler).Value Then
Range("J" & zaehler).ClearContents
End If
ElseIf Range("H" & zaehler).Value = "U" Then
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
MsgBox Range("K" & zaehler)
End If
If Range("J" & zaehler).Value <= Range("I" & zaehler).Value Then
Range("J" & zaehler).Value = "Ausgestoppt"
End If
End If
Next zaehler
End Sub
Wenn es geht wär der Einbau einer Pause (oder die Lösung dieses Problems) WIRKLICH SUPER NETT VON DIR
Antwort 4 von nighty vom 16.12.2020, 18:50 Options
hi all
eine pause waere das eine variante
gruss nighty
Sub pause()
Dim Pausenlänge As Integer
Dim Start As Double
Pausenlänge = 5
Start = Timer
Do While Timer < Start + Pausenlänge
Loop
End Sub
Antwort 5 von nighty vom 16.12.2020, 18:58 Options
hi all
eventuell
DoEvents
im auge behalten(zwichen do loop)
gruss nighty