вызов пакетного файла в VBA не работает должным образом - PullRequest
2 голосов
/ 25 февраля 2012

Я пытаюсь создать программу, которую могут использовать другие люди.В настоящее время мои файлы находятся в каталоге C:\Documents and Settings\jpmccros\Desktop\test

Этот каталог содержит мои macro.xlsm, names.bat и другой подкаталог с именем Data.

Пакетный файл names.bat делает следующее:

cd data

dir/b/o:n > names.txt

Это именно то, что я хочу.Когда я открываю командный файл (который находится в каталоге C:\Documents and Settings\jpmccros\Desktop\test\, командная строка MS DOS запускается в C:\Documents and Settings\jpmccros\Desktop\test\, затем запускает мои команды и делает мой файл names.txt, и помещает его именно там, где я хочу.

Когда я открываю macro.xlsm и запускаю macro1, он вызывает пакетный файл для открытия.

Это моя макрос-команда:

Dim names_txt, names_bat, full_name, filename, folder As String
Dim position As Integer
Dim pathcrnt As String
full_name = ThisWorkbook.FullName
filename = ThisWorkbook.Name
position = InStr(1, full_name, filename, 1)
position = position - 1
folder = Left(full_name, position)

names_bat = folder & "names.bat"

Shell names_bat, vbMaximizedFocus

Теперь вот моя проблема:Макрос фактически открывает командный файл, или, по крайней мере, он открывает командную строку MS DOS. Однако, когда он открывает командный файл, начальный каталог:

C:\Documents and settings\jpmccros\My Documents

Мне нужноэтот пакетный файл и макрос должны быть динамическими, поэтому мне нужен пакетный файл, чтобы открыть его каталог отображения. Что с этим происходит? Есть ли команда, которую я могу написать в моем пакетном файле? Это что-то в VBA?

1 Ответ

3 голосов
/ 26 февраля 2012

Ваш метод доступа к пакетному файлу с использованием activeworkbook.path работает. Код VBA находит его относительно его текущего местоположения и открывает его.

Однако проблема, с которой я столкнулся, когда VBA открывает командный файл, каждый раз запускается в командной строке в каталоге C:\Documents and Settings\jpmccros\My Documents\.

Ваш метод не обходит эту проблему. Я создал решение (и использовал вашу идею activeworkbook.path тоже). Вместо того, чтобы вызывать мой командный файл, я просто создаю его в VBA и распечатываю строку cd var_activeworkbook.path & "\data". Таким образом, я смог найти в VBA текущий каталог и сохранить его как переменную.

Проверьте это:

Dim pathcrnt As String, batch_file As Integer

pathcrnt = ActiveWorkbook.Path
batch_file = FreeFile()
Open pathcrnt & "names.bat" For Output As #batch_file
Print #batch_file, "cd " & pathcrnt & "\data"
Print #batch_file, "dir/b/o:n > names.txt"
Print #batch_file, "pause"
Close #batch_file

Shell pathcrnt & "names.bat", vbMaximizedFocus
...