Страницы: 1
RSS
Как программно очистить Immediate Window?
 
Отлаживаю свой набор подпрограмм для работы с 2D-массивами.  
Вывод результатов для проверки работы этих подпрограмм делаю в Immediate Window.  
Очень часто приходится перед началом отладки очищать Immediate Window чтобы там не плодилась куча данных.  
Подскажите, пожалуйста, как в коде программы можно выполнить очистку Immediate Window?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Цитата ( http://www.eggheadcafe.com/software/aspnet/31899691/re-clearing-immediate-window-in-vba-by-code.aspx )  
 
Sub DelInImmedate()  
Debug.Print Now  
Application.SendKeys "^g ^a {DEL}"  
End Sub  
 
Я так понимаю, будет работать только при активном окне VBE. Но при отладке это ведь так?
 
Там ниже и сложный универсальный вариант есть.
 
Дмитрий, я давно этой очень удобной надстройкой пользуюсь. Но всё равно, лишние "мышкодвижения" напрягают.  
Казанский,  
спасибо! Работает.  
Только что-то с ходу не въеду: SendKeys "^g ^a {DEL}" это что за комбинация?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Въехал: ^g - активизация Immediate Window  
СПАСИБО.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Не так всё просто оказалось, к сожалению...  
Такая последовательность почему-то в пошаговом режиме (по F8) у меня работает отлично, а в нормальном - продолжает чистить окно и дальше...  
Для пробы сделал программку для проверки состояния декларации Option Compare Text:  
 
Sub test_Option_Compare_Text()  
  Dim txt$: txt = "F"  
  'Application.SendKeys "^g ^a {DEL}"   'очистить Immediate Window  
Debug.Print IIf(txt = "f", "Option Compare Text", "Not Compare Text")  
End Sub  
 
так всё работает, а если раскомментировать Application.SendKeys "^g ^a {DEL}", то Immediate Window продолжает чиститься и далее до End Sub  
Такое впечатление, что после активизации и очистки Immediate Window нужно ещё и как-то вернуться к самому коду (что и происходит в пошаговом режиме)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алексей, а у Вас случайно не следующая конструкция?!  
---------------------  
Sub tt()  
'Начало кода  
Call Очистить_ImmediateWindow  
'Продолжение...  
End Sub  
 
Sub Очистить_ImmediateWindow()  
'Ваш код  
End Sub  
---------------------
<FONT COLOR="CadetBlue">
 
Мда....что-то я плохо видеть стал...
<FONT COLOR="CadetBlue">
 
Sub EmmidiateWindowClear()  
 Dim txt$: txt = "F"  
 Application.OnTime Now, "IsOptionCompare"  
 Application.SendKeys "^g ^a {DEL}" 'очистить Immediate Window  
End Sub  
 
Sub IsOptionCompare()  
 Debug.Print IIf(txt = "f", "Option Compare Text", "Not Compare Text")  
End Sub
 
ZVI, что-то я не понял...  
Вы что, предлагаете написанную для примера подпрограмму  
Sub test_Option_Compare_Text()  
Dim txt$: txt = "F"  
'Application.SendKeys "^g ^a {DEL}" 'очистить Immediate Window  
Debug.Print IIf(txt = "f", "Option Compare Text", "Not Compare Text")  
End Sub  
разбить на две?  
и что, мне так делать для каждой п/пр, которую я хочу отлаживать, а перед этим очистить Immediate?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=The_Prist}{date=07.09.2010 01:10}{thema=}{post}Может после кода очистки стоит задержечку небольшую сделать?{/post}{/quote}  
Дмитрий, так значит, у Вас тоже в непрерывном режиме глючит, а в пошаговом работает?  
А я уж хотел попытаться перегружаться.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Да, не получается...  
Пробовал задержку до 3 секунд, DoEvents до, после и между печатью, BS вместо DEL, второй аргумент True (Application.SendKeys "^g^a{DEL}", True), переключение на код (Application.SendKeys "{F7}", True), переключение еа Excel и обратно (Application.SendKeys "%{F11}", True) - не помогло. Либо все удаляет, либо ничего (если DoEvents).  
 
Помогает только Stop или установка точки останова (F9) на строке после очистки окна, потом продолжать по F5.
 
Если так сложно, то и фиг с ним... Проще кнопочку очистки нажать.  
Правда, кнопочка у меня очищает Immediate Window только при английской раскладке клавиатуры, а при русской (после ввода комментариев, например) - только добавляет в Immediate Window букву а
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=07.09.2010 01:30}{thema=}{post}ZVI, что-то я не понял...  
Вы что, предлагаете написанную для примера подпрограмму  
Sub test_Option_Compare_Text()  
Dim txt$: txt = "F"  
'Application.SendKeys "^g ^a {DEL}" 'очистить Immediate Window  
Debug.Print IIf(txt = "f", "Option Compare Text", "Not Compare Text")  
End Sub  
разбить на две?  
и что, мне так делать для каждой п/пр, которую я хочу отлаживать, а перед этим очистить Immediate?{/post}{/quote}  
Алексей, я ничего не предлагаю, просто написал работающий код, проигнорируйте его, если найдете лучший способ :-)  
Использование SendKeys, вообще считается небезопасным и не рекомендуется, так как запуск макроса с SendKeys из другого окна может привести к совершенно неожиданным действиям. Аккуратное использолвание API предпочтительнее, потому, что более контролируемое - можно проверить, произошло ли переключение в необходимое окно и только после этого что-то в нем изменить.
Страницы: 1
Читают тему
Наверх