Ihre Funktion funktioniert gut, aber ich vermute, dass Sie es als UDF aus einer Excel-Zelle aufrufen. UDFs dürfen die Statusleiste nicht aktualisieren oder andere Änderungen an der Excel-Umgebung vornehmen. (. Grundsätzlich ist ein UDF erlaubt einen Wert zurückgeben und das ist es)
Wenn Sie diese Funktion aus einem Stück VBA-Code genannt, funktioniert es OK, sofern Sie es ändern einen Wert zurückgeben, wie:
Function testStatusBar(delay As Long) As String
Dim progress As Long
For progress = 1 To delay
Application.StatusBar = "Progress: test ongoing ...." & (progress/delay) & "%"
DoEvents
Next progress
Application.StatusBar = False
testStatusBar = "Finished"
End Function
(Man könnte es dann von anderen VBA-Code aufrufen, indem er sagte myReturnValue = testStatusBar(200000)
Oder es statt einer Funktion auf einen Teil ändern, dh
Sub testStatusBar(delay As Long)
Dim progress As Long
For progress = 1 To delay
Application.StatusBar = "Progress: test ongoing ...." & (progress/delay) & "%"
DoEvents
Next progress
Application.StatusBar = False
End Sub
(und dann Rufen Sie es an, indem Sie testStatusBar 200000
sagen.)
Sie müssen Ihr Programm mit 'F8' debuggen, um herauszufinden, wo die Statusleiste mit 'Bereit'-Nachricht neugemalt wird. –