Как я могу написать на консоль из кода Excel vba?

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

6 ответов


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


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


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

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


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


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


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

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