Excel中VBA的Name和Shell相关问题(高手进,有加分)

1.用Name A as B 语句重命名目录时如该目录或其下层目录处于打开状态时,就会产生错误,那如何判断该目录或其下层子目录是否处于打开状态呢?
2.类似的,用shell命令打开其它应用程序,如果其它应用程序已处于运行状态,虽不一定会产生错误,但同时运行多个程序也不好,可能会大量占用内存,那如何判断该程序是否处于运行状态呢?
3.另外,打开与关闭目录的命令是什么?
另外,以上问题不能使用Error语句,否则我也不用在这里提问了
本人是初学者,希望能写明所用到的命令的格式及语法,最好再举例说明一下,答的满意的有加分(20-50分).
决不食言!
多谢了!

问题1和2中判断文件夹和程序是否打开和运行, 解决思路是调用windows API的findwindow 函数去查找是否有符合条件的窗口,如果有则文件夹是打开的或者程序是运行的.代码如下:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long '声明API findwindow函数

Sub aa()
Name = "downloads" '把文件夹窗口名称或者程序窗口名称赋值给name
i = FindWindow(vbNullString, Name)
If i <> 0 Then MsgBox Name & "是打开的!"
End Sub

关闭目录的方法
方法1: 关闭指定文件夹
Sub fig()
Set WS = CreateObject("WSCRIPT.SHELL")
WS.AppActivate "本地磁盘 (C:)"
WS.SendKeys "%fc"
End Sub
如果不能确定文件夹是否打开用
方法2:关闭所有的文件夹
Sub fig1()
Set x = CreateObject("wscript.shell")
x.Run "taskkill /F /IM explorer.exe", 0, True
x.Run "explorer.exe", 1, False
End Sub追问

你好,第1,2个问题已经解决了,故先追加30分
但第3个问题没有解决:
我测试了下方法1,但无法把焦点移到相应的窗口上去,窗口只是作为焦点闪了下,又回到Thisworkbook上了,那怎样才能让窗口持续拥有焦点呢?
另外,有打开目录的办法么
多谢了

追答

方法1.我测试过是可以正确关闭指定的窗口的,但不能用F8单步执行.
让窗口持续拥有焦点,
删除WS.SendKeys "%fc" 这句
且不要在VBA编辑器中执行方法1 的代码,
在工作表窗口按ALT+F8选中该宏执行是会持续拥有焦点的.
打开文件夹
方法1
ActiveWorkbook.FollowHyperlink Address:=ThisWorkbook.Path, NewWindow:=True
方法2
Shell "EXPLORER.EXE " & ThisWorkbook.Path, vbNormalFocus

追问

多谢了,虽然关闭目录的方法1经测试还是不行(可能我用的是Excel2000(单位的电脑)的关系吧),但发现可以利用 FindWindow 先判断目录是否打开,如果是打开的,然后用 Shell 命令 把焦点移到该目录上,再延时后用 sendkeys 关闭目录的办法,总算搞定了.(幸亏用shell打开目录时,如果目录存在,是不会另外再打开一个的,呵呵)
另加50分,非常感谢 

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网