Индикатор выполнения для вызова нескольких подпрограмм

Есть ли способ создать панель процесса в Excel VBA как вызов нескольких подпрограмм? Копирование и вставка из файла в эту книгу заняло примерно 10 минут. Я хотел бы знать, как долго он обрабатывается (процент выполнения). Я знаю, что если у меня есть прогресс цикла for, я мог бы применить для него индикатор выполнения. Не знаю, как пройти через что-то подобное.

Sub batch_import()

Call Import_NJ
Call Import_NY
Call Import_MD
Call Import_VA
Call Import_WV
Call Import_PA
Call Import_KY
Call Import_TN
Call Import_IN
Call Import_IA
Call Import_MI
Call Import_MO
Call Import_IL
Call Import_LW

End Sub

person Oliver Bird    schedule 10.08.2017    source источник
comment
Вы хотите, чтобы индикатор выполнения обновлялся внутри подпрограммы Import_* или только между каждым вызовом?   -  person Vincent G    schedule 10.08.2017
comment
У вас есть 14 вызовов, после каждого вызова вы можете увеличить переменную на 1/14, например: x = x + 1/14. В конце он достигает 1. Вы можете отображать x как хотите. (Вы можете просто использовать debug.print или, если вам нужно что-то для конечного пользователя, вы можете использовать панель в пользовательских формах)   -  person Tehscript    schedule 10.08.2017
comment
Возможно, немного продвинутый материал VBA (включает классы, атрибуты модулей, экземпляры по умолчанию и фабричные методы), но фактическая повторно используемая, гибкая, отменяемая и красивая форма индикатора прогресса вполне осуществима в VBA; см. здесь.   -  person Mathieu Guindon    schedule 10.08.2017
comment
@Vincent G Я хочу обновить весь процесс импорта.   -  person Oliver Bird    schedule 10.08.2017
comment
@Tehscript и кружка Мэта, я бы попробовал. Спасибо за полезную информацию   -  person Oliver Bird    schedule 10.08.2017


Ответы (1)


Если у вас всегда есть одинаковое количество сабвуферов для колла (т.е. 14 идентифицированных). ты мог бы сделать

Sub batch_import()
with Application
    Call Import_NJ
    .StatusBar = "Progress: " & Format(1 / 14, "0%")
    Call Import_NY
    .StatusBar = "Progress: " & Format(2 / 14, "0%")
    Call Import_MD
    .StatusBar = "Progress: " & Format(3 / 14, "0%")
    Call Import_VA
    .StatusBar = "Progress: " & Format(4 / 14, "0%")
    Call Import_WV
    .StatusBar = "Progress: " & Format(5 / 14, "0%")
    Call Import_PA
    .StatusBar = "Progress: " & Format(6 / 14, "0%")
    Call Import_KY
    .StatusBar = "Progress: " & Format(7 / 14, "0%")
    Call Import_TN
    .StatusBar = "Progress: " & Format(8 / 14, "0%")
    Call Import_IN
    .StatusBar = "Progress: " & Format(9 / 14, "0%")
    Call Import_IA
    .StatusBar = "Progress: " & Format(10 / 14, "0%")
    Call Import_MI
    .StatusBar = "Progress: " & Format(11 / 14, "0%")
    Call Import_MO
    .StatusBar = "Progress: " & Format(12 / 14, "0%")
    Call Import_IL
    .StatusBar = "Progress: " & Format(13 / 14, "0%")
    Call Import_LW
    .StatusBar = "Progress: " & Format(14 / 14, "0%")
    .StatusBar =null
end with
End Sub
person Dude_Scott    schedule 10.08.2017
comment
Я бы попробовал это!! Это выглядит очень просто для понимания и запуска. - person Oliver Bird; 10.08.2017
comment
Привет, @Dude_Scott. Пока я это печатаю. Панель процессов работает настолько плавно, насколько это возможно. Спасибо за советы! Однако что, если я хочу, чтобы это прекратилось? - person Oliver Bird; 11.08.2017
comment
Измените .StatusBar = null на .StatusBar = false - person Dude_Scott; 11.08.2017