VBA能否列出已打开的所有EXCEL表格名称[已解决]
本帖最后由 heroxianf 于 2016-12-17 12:26 编辑通过一些咨询和自己测试,检查指定已打开的EXCEL表格是否存在都存在一些判断失败的现象,我想可不可以通过VBA 来获取所有打开EXCEL表格名字进行判断,希望大家给出VBA的代码。
解决在代码 19 楼 WinExists() 仅仅只是判断窗口是否存在。窗口可以以各种形式存在。建议你用WinGetState()获取各种形态再作判断。 回复 2# afan
谢谢A大 总算可以成功检测了。但是WinGetState我用句柄还是不行,只能把文件名写到INI里读取,通过判断窗口名称可以成功。
;Local $sRead = IniRead($aIni_Config, "配置", "ExcelHWnd", "默认值")
Local $ok = WinGetState('Microsoft Excel - test.xlsx')
MsgBox(0, '', $ok)
If$ok Then
MsgBox(0, '', '窗口还在')
Else
MsgBox(0, '', '窗口已经关闭')
EndIf 回复afan
谢谢A大 总算可以成功检测了。但是WinGetState我用句柄还是不行,只能把文件名写到INI里读 ...
heroxianf 发表于 2016-12-2 13:46 http://www.autoitx.com/images/common/back.gif
用句柄显然比用字符串精准得多,也正因如此,你首先需确定用的是“正确”的“句柄”。
p.s, 没安装办公软件,所以不参与此类问题测试。如果你能用最简代码重现你的提问,而不是这类必须安装了某些软件才能测试的话,那会好办许多。 回复 4# afan
那我试试看看系统自带的会出现这个现象不。{:face (396):}
不过我获取excel表格的句柄有两种。可能是句柄获取的不得当。 各种不懂 回复 6# haijie1223
这种毛病只有遇得到了!{:face (394):} 各种不懂
各种不懂 我来看看的,各种不懂 回复 9# Jane沐沐沐
其实我自己都被自己搞懵逼了。 回复 3# heroxianf
$oexcel=ObjCreate("excel.application") ;创建excel进程
$oexcel.visible=False;隐藏进程界面,可以提高处理速度
$wb=$oexcel.workbooks.open($sFilePath1);打开选定工作簿
;取得工作薄的各工作表的名字放入$arr的数组内
Local $iTemp = $wb.Sheets.Count ;取得当前表格个数
Local $arr[$iTemp]
For $i=1 To$iTemp
$arr[$i-1]=$wb.sheets($i).Name ;把表名存入数组
Next
_ArrayDisplay($arr,"表格的名字")
是不是要这个? 不知道WinGetState 怎样使用? 回复heroxianf 是不是要这个?
blue_dvd 发表于 2016-12-10 23:28 http://www.autoitx.com/images/common/back.gif
http://pics.sc.chinaz.com/Files/pic/faces/4279/06.gif $excel=ObjGet("","excel.application")
$str=""
If IsObj($excel) Then
If $excel.workbooks.count>0 Then
For $wb In $excel.workbooks
With $wb
$str&='已打开工作簿:"'&.fullname&'"'&@CRLF&@tab&"包含如下工作表:"&@CRLF
For $ws In .worksheets
$str&=@tab&@tab&$ws.name&@CRLF
Next
EndWith
Next
Else
$str&="没有打开的工作簿!"&@CRLF
EndIf
Else
$str&="没有打开的Excel进程!"&@CRLF
EndIf
MsgBox(0,"结果",$str)这个试下,不过如果运行了多个excel进程的话这个只能查到一个进程的 回复 14# kevinch
还是Kevinch大哥牛!记下笔记!
页:
[1]
2