2015-04-07 2 views
0

Хейхо, у меня возникла странная проблема.VBA исполняет .bat, но перезаписывает компакт-диск в .bat

исполняю линию, как это в моем VBA:

Shell "path_to_my_bat\batname.bat" 

Содержание летучих мышей очень проста, а также:

cd c:\some_path\ 
copy *csv newfiles.txt 

Что она делает просто взять все томов CSV в каталоге и объединяет их в один .txt, который я использую далее по строке в макросе.

Проблема в том, что я играл с некоторыми скриптами vbs, похоже, что я что-то изменил о том, как работает команда shell.

Команда «cd», кажется, пропущена или перезаписана чем-то, фактическая вторая часть летучей мыши выполняется в каталоге, в котором находится моя рабочая книга. К счастью, у меня был .csv, лежащий там, иначе я бы не заметили ...

Bat на нем отлично работает, если я не запускаю его из VBA.

VBS скрипт я играл выглядит следующим образом (он должен открыть файл и выполнить макрос там):

Я думаю, что я переписал какой-то настройки по умолчанию, что я не должен был возился с ... Кроме того, я ничего не сделал, что знаю, что-то изменить. Сегодня утром макрос прекрасно работал, но теперь из-за ошибки летучей мыши это бесполезно.

' Create a WshShell to get the current directory 
Dim WshShell 
Set WshShell = CreateObject("WScript.Shell") 

' Create an Excel instance 
Dim myExcelWorker 
Set myExcelWorker = CreateObject("Excel.Application") 

' Disable Excel UI elements 
myExcelWorker.DisplayAlerts = False 
myExcelWorker.AskToUpdateLinks = False 
myExcelWorker.AlertBeforeOverwriting = False 
myExcelWorker.FeatureInstall = msoFeatureInstallNone 

' Tell Excel what the current working directory is 
' (otherwise it can't find the files) 
Dim strSaveDefaultPath 
Dim strPath 
strSaveDefaultPath = myExcelWorker.DefaultFilePath 
strPath = WshShell.CurrentDirectory 
myExcelWorker.DefaultFilePath = strPath 

' Open the Workbook specified on the command-line 
Dim oWorkBook 
Dim strWorkerWB 
strWorkerWB = strPath & "\YourWorkbook.xls" 

Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB) 

' Build the macro name with the full path to the workbook 
Dim strMacroName 
strMacroName = "'" & strPath & "\YourWorkbook" & 
    "!Sheet1.YourMacro" 
on error resume next 
    ' Run the calculation macro 
    myExcelWorker.Run strMacroName 
    if err.number <> 0 Then 
     ' Error occurred - just close it down. 
    End If 
    err.clear 
on error goto 0 

oWorkBook.Save 

myExcelWorker.DefaultFilePath = strSaveDefaultPath 

' Clean up and shut down 
Set oWorkBook = Nothing 

' Don’t Quit() Excel if there are other Excel instances 
' running, Quit() will 
shut those down also 
if myExcelWorker.Workbooks.Count = 0 Then 
    myExcelWorker.Quit 
End If 

Set myExcelWorker = Nothing 
Set WshShell = Nothing 

Если это помогает, я работающий под управлением Windows 8.1 64 бит с Excel 2010 64bit Получил полный админ-доступ и т.д.

+0

Вы работаете с другого диска? – SLaks

ответ

0

Если текущий каталог находится на D: диск, то cd c:\some_path\ установит каталог для C :, но ваш текущий диск останется где-то на D :. Вы должны сказать cmd.exe на самом деле изменить какой диск вы работаете.

Просто измените команду

cd /d c:\some_path\ 

или

pushd c:\some_path\ 
+0

yep, который решает проблему. Благодаря! Теперь мой вопрос: почему это работало в первую очередь. Летучая мышь и xlsm всегда были в разных каталогах на разных жестких дисках. Но да, я думаю, проблема решена :) – Vaizard27

Смежные вопросы