Почему исполняемый файл в Excel VBA не выводит файл?

Итак, у меня есть книга Excel / VBA с поддержкой макросов и кнопкой, которая записывает файл .txt, а затем вызывает файл .exe в том же каталоге. .Exe написан на C ++ и является предполагаемый вывести другой файл.

Проблема, с которой я столкнулся, заключается в том, что по какой-то причине, когда книга Excel вызывает C ++ .exe, исполняемый файл обрабатывает информацию из .txt просто отлично, но выходной файл никогда не появляется. Но если у меня есть рабочая книга, просто создайте файл .txt, а затем я сам запускаю программу на C ++, и программа выводит файл правильно.

Кажется, что вызов .exe из книги Excel / VBA приводит к тому, что .exe не выводит файл.

Вот код Excel / VBA

Open (ActiveWorkbook.Path & "\excel.txt") For Output As #1
Print #1, MyString
Close #1
ActiveWorkbook.FollowHyperlink (ActiveWorkbook.Path & "\MyProgram.exe"),
NewWindow:=True

И C ++ разделен между несколькими файлами, но ключевая часть, которая может вызывать проблемы, ниже

ofstream OutputFile;
int Sequence[12];
...
...
OutputFile.open("Output.solution");
for (int i=1;i<12;i++)
OutputFile << Int_to_String(Sequence[i]) << " ";
OutputFile.close();

Так как же получить исполняемый файл C ++ для вывода файла «Output.solution» при вызове из Excel VBA? Просто чтобы быть ясно — если я запускаю программу C ++ отдельно делает вывести файл.

Редактировать: при выполнении .exe по отдельности, соответствующая информация помещается в файл «Output.solution» в том же каталоге, но при вызове из Excel / VBA .exe вместо этого помещает пустой «Output.solution» в папку «Мои документы».

Как сделать так, чтобы этот файл отображался в исходном каталоге при вызове из Excel / VBA? и как я могу убедиться, что он действительно заполнит файл информацией, как при вызове вне Excel?

1

Решение

Ты конечно что ваш текущий каталог — это то, что вы думаете?

Может случиться так, что это где-то иное, чем путь к вашей книге, и в этом случае выходные файлы будут созданы там, а не там, где вы ожидаете.

Самый простой способ проверить это — выполнить программу на C ++ без пути:

ActiveWorkbook.FollowHyperlink ("MyProgram.exe"), NewWindow:=True

и посмотрим, жалуется ли он на то, что не может найти исполняемый файл.

Другой способ — использовать известное местоположение (временно) для выходного файла:

OutputFile.open("c:\\knowndir\\Output.solution");

и проверьте, что он создан. Если это так, то нет ничего плохого в вашем исполняемом файле, вы просто находитесь в каталоге, отличном от того, что вы думаете.

Кроме того, поиск по всему диску для поиска Output.solution файл. Если вы находитесь в другом каталоге это где файл будет создан.

Если выясняется, что это проблема, возможно, самое простое решение — изменить каталог перед запуском исполняемого файла. VBA имеет chdir команда только для этой цели. Возможно, вам придется изменить его позже в зависимости от ваших потребностей, и вы можете использовать curdir за это.

2

Другие решения

Лучше всего использовать такой инструмент, как SysInternal Process Monitor, чтобы увидеть, происходит ли запись файла вообще, а если нет, то почему бы и нет.

Я предполагаю, что вы, вероятно, недовольны исполняемым файлом, работающим в другом каталоге, из каталога, из которого вы ожидаете его запустить. Попробуйте вывести в абсолютное местоположение (или сначала вызвать SetCurrentDirectory), чтобы посмотреть, поможет ли это.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector