Heyho,我遇到了一个奇怪的问题。
我在我的VBA中执行这样的一行:
Shell "path_to_my_bat\batname.bat"
蝙蝠的内容也非常简单:
cd c:\some_path\
copy *csv newfiles.txt
它的作用就是简单地将目录中的所有csv合并到一个.txt中,然后我在宏中的下一行使用它。
问题是,因为我已经使用了一些vbs脚本,所以我似乎已经改变了一些关于shell命令如何工作的东西。
“cd”命令似乎被跳过或被某些东西覆盖,蝙蝠的实际第二部分在我的工作簿所在的目录中执行。 幸运的是,我有一个.csv躺在那里,否则我不会注意到......
如果我不从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
如果有帮助,我使用Excel 2010 64bit运行Windows 8.1 64位 获得完整的管理员访问等。
答案 0 :(得分:0)
如果当前目录位于D:驱动器上,则cd c:\some_path\
将设置C:的目录,但您当前的驱动器将保留在D:的某个位置。您需要告诉cmd.exe实际更改您正在使用的驱动器。
只需将命令更改为
即可cd /d c:\some_path\
或
pushd c:\some_path\