VBA中调用SHELL心得。
2010-08-21 10:49:38| 分类:
Excel自动化
| 标签:
|举报
|字号大中小 订阅
在VBA中,有人可能会用到SHELL来调用外部批处理文件。
在实践过程中,往往SHELL调用批处理的结果与DOS下执行的效果不一样。这是什么原因呢?
老朽多年实践的经验告诉我,在使用SHELL调用DOS批处理时,必须在代码中做好预处理:
在调用SHELL之前,必须要通过以下步骤:(以在E:盘根目录下操作为例)
1、强制改变当前的驱动器: ChDrive "E"
2、强制改变默认的工作目录:chdir "E:\"
完成以上动作之后,再来调用E:\的批处理文件:shell "e:\234.bat"
这样执行的效果就和DOS下执行的效果一致。
原因在哪?这是因为SHELL的工作切入点是在Application的默认工作目录中,也就是说,除非在批处理中强行界定目标路径,否则,SHELL执行批处理时永远都是Application的默认工作目录下进行。
而Application的默认工作目录一般都是“我的文档”。你可以这样试验一下,在E:\创建一个批处理234.bat,内容是 dir >123.inf ,就是将dir列表写进到123.inf文件中,然后在立即窗口中shell "E:\234.bat" ,之后再用windows的搜索功能,搜索一下刚刚生成的123.inf文件,你就会发现这个文件是在“我的文档”中,而不是在E:\下,而在DOS下直接执行234.bat,则结果文件就自然在E:\下。
如果是在立即窗口中,依次执行
ChDrive "E"
chdir "E:\"
shell "e:\234.bat"
你再看一下,生成的文件就在E:\下了。
评论这张
转发至微博
转发至微博
评论