Запуск.exe напрямую и через Shell VBA, возвращая разные результаты
Когда я нажимаю непосредственно в.exe-файле "PrintUsers.exe", вывод правильный. Но когда я делаю это через VBA, используя Shell, результат будет другим. Он пытается найти текстовый файл в другом каталоге. Зачем? Смотрите рисунок:
РЕШЕНИЕ: сейчас я использую: GetModuleFileName(NULL, szEXEPath, 2048) вместо GetCurrentDir(buff, FILENAME_MAX);
2 ответа
РЕШЕНИЕ: сейчас я использую: GetModuleFileName(NULL, szEXEPath, 2048) вместо GetCurrentDir(buff, FILENAME_MAX);
Похоже, что PrintUsers.exe
ожидает найти файл doNotEdit.txt
в текущем каталоге.
Лучшее решение состоит в том, чтобы изменить эту программу для поиска файла в том же каталоге, в котором находится сама программа, но, если это невозможно, заставить Excel изменить текущий каталог перед запуском программы, т.е. вставить
ChDir ActiveWorkbook.Path
до вызова Shell
,
Кроме того, как упомянул Яхья Хусейн в комментарии, пробелы внутри путей могут вызвать проблемы. В вашей конкретной ситуации их нет, но, чтобы у вас не было проблем в будущем, рассмотрите возможность использования чего-то вроде
myFile = """" & ActiveWorkbook.Path & "\PrintUsers.exe"""
ChDir ActiveWorkbook.Path
Shell myFile, vbNormalFocus