Найти в Дзене

На заметку VBA разработчику

Просто чтобы сохранить и себе не забыть. На заметку разработчику VBA Понадобилось мне тут намедни отлаживать иерархически построенную систему из коллекций пользовательских классов - штука сложная в том смысле, что формирование сложной и многоуровневой коллекции элементов усложняет отладку, но зато такую конструкцию проще развивать. Ну, например. у меня есть объект упаковка. В ней коллекция артикулов, которые в ней находятся, и ее свойства - идентификационный номер упаковки и номер упаковки в коробке. Если понадобится по физическим процессам добавить еще какие-то свойства и как-то их рассчитывать, то просто добавляются свойства в объект, буквально парой строчек, а не переписывается половина кода. Но вот отлаживать такую конструкцию сложно. Надо или изначально каждую строчку тут же тестировать, или автоматизировать тестирование. Я пошел по третьему пути - просто после каждого прохода цикла вывожу через Debug.Print , какие данные должен записывать в коллекции код. И потребовалось, чтобы п

Просто чтобы сохранить и себе не забыть. На заметку разработчику VBA

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

Но вот отлаживать такую конструкцию сложно. Надо или изначально каждую строчку тут же тестировать, или автоматизировать тестирование. Я пошел по третьему пути - просто после каждого прохода цикла вывожу через Debug.Print , какие данные должен записывать в коллекции код. И потребовалось, чтобы после каждого шага цикла у меня окошко, в которое печатает Debug.Print, очищать. StackOverflow дал ответ: команда для очистки окна вывода дебага будет

Application.VBE.Windows("Immediate").SetFocus

Application.SendKeys "^g ^a {DEL}"

DoEvents

Ничего сложного в нем нет

Application.SendKeys - отсылает ключи с клавиатуры, как будто мы нажимаем на кнопки

^g - это Ctrl-G, активировать окно Immediate, ^a - Ctrl-A, выделить все, DEL - удалить

Таким образом, у меня пошагово в окно отладки выводятся данные, и пошагово же удаляются