Доступ к индикатору выполнения в строке состояния приложения Office - PullRequest
5 голосов
/ 20 октября 2008

Я создаю приложения VBA для Word и Excel, есть ли способ получить доступ к строке прогресса, которая иногда отображается в строке состояния Office.

Ответы [ 4 ]

4 голосов
/ 20 ноября 2008

Следующее будет имитировать индикатор выполнения в строке состояния Excel:

Public Sub UpdateStatusBar(percent As Double, Optional Message As String = "")

    Const maxBars As Long = 20
    Const before As String = "["
    Const after As String = "]"

    Dim bar As String
    Dim notBar As String
    Dim numBars As Long

    bar = Chr(31)
    notBar = Chr(151)
    numBars = percent * maxBars

    Application.StatusBar = _
    before & Application.Rept(bar, numBars) & Application.Rept(notBar, maxBars - numBars) & after & " " & _
         Message & " (" & PercentageToString(percent) & "%)"

    DoEvents

End Sub
3 голосов
/ 22 октября 2008

Кроме того, я бы порекомендовал записать текущее состояние StatusBar, а затем восстановить его, когда все будет сделано.

Dim OldStatus
With Application
    OldStatus = .DisplayStatusBar
    .DisplayStatusBar = True
    .StatusBar = "Doing my duty, please wait..."
End With
' Do what you do best here (you can refresh the .StatusBar message with updted, as needed)
With Application
    .StatusBar = False
    .DisplayStatusBar = OldStatus
End With
0 голосов
/ 26 октября 2008

AFAIK, невозможно воспроизвести синюю линию точек, используемую Word & Excel, чтобы показать прогресс в направлении 100%, например, при открытии файла.

Я помню, как однажды видел какой-то код для его репликации в строке состояния, но он был сложным, и я бы не стал его рекомендовать, когда вместо этого достаточно сказать «X% завершено» в строке состояния, используя приложение .StatusBar.

0 голосов
/ 20 октября 2008

Я не обращался к индикатору выполнения, но в прошлом я использовал что-то подобное, чтобы поместить текст состояния задачи в строку состояния ...

Sub StatusBarExample()
    Application.ScreenUpdating = False 
    ' turns off screen updating
    Application.DisplayStatusBar = True 
    ' makes sure that the statusbar is visible
    Application.StatusBar = "Please wait while performing task 1..."
    ' add some code for task 1 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = "Please wait while performing task 2..."
    ' add some code for task 2 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = False 
    ' gives control of the statusbar back to the programme
End Sub
...