Как позволить пользователям выходить из продолжительных задач VBA?

Я только что придумал этот аккуратный обходной путь

var firstChar = Array(string)[0]
8
задан Lunatik 3 July 2009 в 10:39
поделиться

2 ответа

Вам нужны DoEvents и переменная, область действия которой превышает область действия того, что вы выполняете. То есть, если это просто процедура, вам понадобится переменная уровня модуля. Если это более одного модуля, вам нужна глобальная переменная. См. Здесь

Секундомер при DDoE

Обычно движок VB связывает процессор, пока это не будет сделано. Однако с помощью DoEvents VB позволяет процессору работать со всем, что находится следующим в очереди, а затем возвращаться к VB.

11
ответ дан 5 December 2019 в 15:25
поделиться

Я не думаю, что есть способ сделать это так, как вы хотели бы, чтобы он работал. VBA - это язык сценариев, поэтому, когда вы начинаете свою процедуру, она будет работать, пока не будет завершена. Если бы у вас была где-то еще одна кнопка, которая даже БЫЛА позволяла вам щелкнуть по ней во время работы исходной процедуры, я не уверен, как вы могли бы ссылаться на эту процедуру и остановить ее.

Вы могли бы сделать что-то вроде запроса пользователя, хотят ли они contine, но это заставит его работать еще дольше.

Также вы можете сделать так, чтобы ваша процедура проверяла условие вне Excel и продолжала работать, пока оно истинно. Что-то простое может быть проверка, находится ли определенный текстовый файл в папке. Если вы хотите, чтобы процедура остановилась, откройте папку и переместите файл. На следующей итерации вашего цикла он не увидит файл и не перестанет работать. Тупой, неэффективный, и не элегантно, но сработает. Вы также можете проверить ячейку, флажок, радиокнопку, в основном любой элемент управления на другом листе Excel, запущенном в другом экземпляре Excel. Опять неуклюже.

CTRL + Break работает. Примите это и двигайтесь дальше. Однако есть один интересный трюк: если вы защитите свой код паролем и они нажмут CTRL + Break, опция отладки будет недоступна, и они получат только Continue или End.

Если это код, который часто запускается, у вас есть рассматривали сценарий чего-то, что запускает его в то время, когда человек не использует компьютер? Раньше я запускал макросы очистки экрана telnet, на просмотр всех виджетов у меня уходили часы, но я всегда запускал их либо на отдельном компьютере, либо когда меня не было (по ночам / в выходные).

в основном любой элемент управления на другом листе Excel, работающий в другом экземпляре Excel. Опять неуклюже.

CTRL + Break работает. Примите это и двигайтесь дальше. Однако есть один интересный трюк: если вы защитите свой код паролем и они нажмут CTRL + Break, опция отладки будет недоступна, и они получат только Continue или End.

Если это код, который часто запускается, у вас есть рассматривали сценарий чего-то, что запускает его в то время, когда человек не использует компьютер? Раньше я запускал макросы очистки экрана telnet, на просмотр всех виджетов у меня уходили часы, но я всегда запускал их либо на отдельном компьютере, либо когда меня не было (по ночам / в выходные).

в основном любой элемент управления на другом листе Excel, работающий в другом экземпляре Excel. Опять неуклюже.

CTRL + Break работает. Примите это и двигайтесь дальше. Однако есть один интересный трюк: если вы защитите свой код паролем и они нажмут CTRL + Break, опция отладки будет недоступна, и они получат только Continue или End.

Если это код, который часто запускается, у вас есть рассматривали сценарий чего-то, что запускает его в то время, когда человек не использует компьютер? Раньше я запускал макросы очистки экрана telnet, на просмотр всех виджетов у меня уходили часы, но я всегда запускал их либо на отдельном компьютере, либо когда меня не было (по ночам / в выходные).

заключается в том, что если вы защитите свой код паролем, и они нажмут CTRL + Break, опция отладки будет недоступна, и они получат только Continue или End.

Если это код, который часто запускается, рассматривали ли вы сценарий того, что запускает его во время раз, когда человек не пользуется компьютером? Раньше я запускал макросы очистки экрана telnet, на просмотр всех виджетов у меня уходили часы, но я всегда запускал их либо на отдельном компьютере, либо когда меня не было (по ночам / в выходные).

заключается в том, что если вы защитите свой код паролем, и они нажмут CTRL + Break, опция отладки будет недоступна, и они получат только Continue или End.

Если это код, который часто запускается, рассматривали ли вы сценарий того, что запускает его во время раз, когда человек не пользуется компьютером? Раньше я запускал макросы очистки экрана telnet, на просмотр всех виджетов у меня уходили часы, но я всегда запускал их либо на отдельном компьютере, либо когда меня не было (по ночам / в выходные).

0
ответ дан 5 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: