heroxianf 发表于 2016-12-2 11:42:18

VBA能否列出已打开的所有EXCEL表格名称[已解决]

本帖最后由 heroxianf 于 2016-12-17 12:26 编辑

通过一些咨询和自己测试,检查指定已打开的EXCEL表格是否存在都存在一些判断失败的现象,我想可不可以通过VBA 来获取所有打开EXCEL表格名字进行判断,希望大家给出VBA的代码。


解决在代码 19 楼

afan 发表于 2016-12-2 12:57:05

WinExists() 仅仅只是判断窗口是否存在。窗口可以以各种形式存在。建议你用WinGetState()获取各种形态再作判断。

heroxianf 发表于 2016-12-2 13:46:15

回复 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 发表于 2016-12-2 15:23:58

回复afan

谢谢A大 总算可以成功检测了。但是WinGetState我用句柄还是不行,只能把文件名写到INI里读 ...
heroxianf 发表于 2016-12-2 13:46 http://www.autoitx.com/images/common/back.gif


    用句柄显然比用字符串精准得多,也正因如此,你首先需确定用的是“正确”的“句柄”。

p.s, 没安装办公软件,所以不参与此类问题测试。如果你能用最简代码重现你的提问,而不是这类必须安装了某些软件才能测试的话,那会好办许多。

heroxianf 发表于 2016-12-2 15:58:35

回复 4# afan


    那我试试看看系统自带的会出现这个现象不。{:face (396):}

不过我获取excel表格的句柄有两种。可能是句柄获取的不得当。

haijie1223 发表于 2016-12-2 16:11:12

各种不懂

heroxianf 发表于 2016-12-2 20:26:31

回复 6# haijie1223


    这种毛病只有遇得到了!{:face (394):}

joyue9 发表于 2016-12-3 12:11:50

各种不懂         

各种不懂

Jane沐沐沐 发表于 2016-12-8 11:41:25

我来看看的,各种不懂

heroxianf 发表于 2016-12-8 13:05:24

回复 9# Jane沐沐沐


其实我自己都被自己搞懵逼了。

blue_dvd 发表于 2016-12-10 23:28:46

回复 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,"表格的名字")
是不是要这个?

blue_dvd 发表于 2016-12-10 23:32:23

不知道WinGetState 怎样使用?

cashiba 发表于 2016-12-11 09:26:54

回复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

kevinch 发表于 2016-12-11 10:03:48

$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进程的话这个只能查到一个进程的

blue_dvd 发表于 2016-12-11 10:21:39

回复 14# kevinch

还是Kevinch大哥牛!记下笔记!
页: [1] 2
查看完整版本: VBA能否列出已打开的所有EXCEL表格名称[已解决]