Как я могу написать в консоль из Excel VBA кода? - PullRequest
12 голосов
/ 26 января 2010

Есть ли способ напечатать сообщение на консоль из макроса Excel vba? У меня есть небольшое консольное приложение VB .NET, которое вызывает макрос Excel, и я хочу, чтобы сообщения об ошибках из кода макроса выводились на консоль. Debug.print не помогает, поскольку он печатает только в ближайшее окно. Есть идеи?

Ответы [ 6 ]

13 голосов
/ 14 января 2013

Мне пришлось использовать Debug.Print (), поскольку Debug.Write () и Console.WriteLine () не работали

9 голосов
/ 03 февраля 2010

Я обнаружил, что нет связи между проектом VB .NET и вызываемым им макросом - макрос не может получить доступ к консоли VB и не может вызвать исключение. Если в макросе возникает ошибка, она не определяется кодом VB .NET. Проект VB просто вызывает макрос, он выполняется, и затем проект продолжает выполняться, не зная, что произошло в макросе. Я обошел это так: макрос записал ошибку в указанную ячейку в таблице Excel, а затем проект VB прочитал ее и использовал для определения наличия ошибки, а затем записал ее в консоль, если была. Что-то вроде исправления читов, но это сработало. Спасибо за все предложения!

5 голосов
/ 26 января 2010

Вы можете попробовать использовать Debug.WriteLine() для вывода отладочной информации в окно вывода Visual Studio, но у меня есть неприятное ощущение, что вы не сможете этого сделать, если не пишете консольное приложение.

Если это действительно не работает, попробуйте использовать метод Console.SetOut(), чтобы перенаправить строки Console.WriteLine() в StreamWriter, который может быть файлом на вашем компьютере. Не идеальное, но возможно работоспособное решение?

1 голос
/ 26 января 2010

Передайте ему путь к файлу и запишите все ошибки в файл.

0 голосов
/ 27 января 2010

Почему бы вам не вернуть строку, содержащую сообщения об ошибках из макроса, в код .Net, а код .Net записать ее в консоль?

В качестве альтернативы, если это действительно ошибки, вызовите ошибки из макроса с помощью Err.Raise и обработайте их в коде .Net с помощью блока Try Catch, который записывает подробности в консоль.

0 голосов
/ 27 января 2010

Вы можете создать COM-компонент в своем приложении VB.NET, который можно вызывать из VBA и записывать в консоль приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...