Как создать диалоговое окно состояния в Excel

StackOverflow https://stackoverflow.com/questions/51941

  •  09-06-2019
  •  | 
  •  

Вопрос

Я создал генератор отчетов базы данных в Excel.Я пытаюсь создать диалоговое окно, в котором будет отображаться информация о состоянии во время работы программы.

Когда я создаю отчет, хотя диалоговое окно появляется, я не могу обновить/обновить отображаемую в нем информацию.В большинстве случаев диалоговое окно отображается лишь частично.Я пробовал использовать метод .repaint, но результаты все равно те же.Я вижу полное диалоговое окно только после создания отчета.

Это было полезно?

Решение

Приведенный ниже код хорошо работает при выполнении действий в Excel (XP или более поздней версии).

Для действий, которые происходят за пределами Excel, например, подключения к базе данных и получения данных, лучшее, что это предлагает, — это возможность отображать диалоговые окна до и после действия (например, «Получение данных», «Получил данные»)

Создайте форму под названием "фрмстатус", поместите метку на форму под названием "Ярлык1".

Установите свойство формы 'ШоуМодал' = ложь, это позволяет выполнять код во время отображения формы.

Sub ShowForm_DoSomething()

    Load frmStatus
    frmStatus.Label1.Caption = "Starting"
    frmStatus.Show
    frmStatus.Repaint
'Load the form and set text

    frmStatus.Label1.Caption = "Doing something"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Doing something else"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Finished"
    frmStatus.Repaint
    Application.Wait (Now + TimeValue("0:00:01"))
    frmStatus.Hide
    Unload frmStatus
'hide and unload the form

End Sub

Другие советы

Попробуйте добавить DoEvents позвоните в свой цикл.Это должно позволить форме перерисовываться и принимать другие запросы.

Я использовал собственную строку состояния Excel (в левом нижнем углу окна) для отображения информации о ходе выполнения аналогичного приложения, которое я разработал ранее.

Это очень хорошо работает, если вы просто хотите отображать текстовые обновления о ходе выполнения и вообще позволяет избежать необходимости в диалоговом окне обновления.

Хорошо, @JonnyGold, вот пример того, что я использовал...

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

Надеюсь это поможет!

Вставьте пустой лист в свою рабочую книгу Переименовать лист, например."информация"

Sheets("information").Select
Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

Продолжить макрос

Sheets("information").Select
Range("C3").Select
Application.ScreenUpdating = True
ActiveCell.FormulaR1C1 = "Preparing Information"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

Продолжить макрос

И т. Д. В качестве альтернативы выберите пустую ячейку где -то на существующем листе вместо вставки нового листа

Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

И т. д

Диалоговое окно также работает в том же потоке пользовательского интерфейса.Итак, он слишком занят, чтобы перекрашивать себя.Не уверен, что VBA имеет хорошие возможности многопоточности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top