2016-08-08 20 views
0

Ich versuche, den in der Statusleiste in Excel 2015 mit VBA angezeigten Text zu ändern. Es scheint jedoch nicht aktualisiert zu werden. Die Meldung "Bereit" bleibt dort.Statusleiste ändern funktioniert nicht in Excel/VBA

Ich habe auch viele Antworten versucht, die hier auf dieser Website für ähnliche Fragen gegeben wurden, aber nichts funktionierte. Stimmt etwas nicht mit dem Code oder muss ich einige Einstellungen ändern?

+0

Sie müssen Ihr Programm mit 'F8' debuggen, um herauszufinden, wo die Statusleiste mit 'Bereit'-Nachricht neugemalt wird. –

Antwort

1

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.)

+0

Korrekt, Excel lässt Sie das Objektmodell nicht in einer Funktion ändern. –

+0

@SMeaden - Funktionen können zwar Änderungen vornehmen, aber Funktionen **, wenn sie als benutzerdefinierte Funktionen ** aufgerufen werden, können nicht. Die OP-Funktion nimmt also Änderungen an der Statusleiste vor, vorausgesetzt, sie wird von einem anderen (nicht-UDF!) VBA-Code aufgerufen. Während Subs normalerweise die Umgebung aktualisieren können, können sie auch nicht von einer UDF aufgerufen werden. – YowE3K

+0

ja, ja. ganz recht. –

Verwandte Themen