找回密码
 加入
搜索
查看: 5263|回复: 19

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

 火.. [复制链接]
发表于 2016-12-2 11:42:18 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2016-12-17 12:26 编辑

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


解决在代码 19 楼
发表于 2016-12-2 12:57:05 | 显示全部楼层
WinExists() 仅仅只是判断窗口是否存在。窗口可以以各种形式存在。建议你用WinGetState()获取各种形态再作判断。
 楼主| 发表于 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
发表于 2016-12-2 15:23:58 | 显示全部楼层
回复  afan

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



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

p.s, 没安装办公软件,所以不参与此类问题测试。如果你能用最简代码重现你的提问,而不是这类必须安装了某些软件才能测试的话,那会好办许多。
 楼主| 发表于 2016-12-2 15:58:35 | 显示全部楼层
回复 4# afan


    那我试试看看系统自带的会出现这个现象不。

不过我获取excel表格的句柄  有两种。可能是句柄获取的不得当。
发表于 2016-12-2 16:11:12 | 显示全部楼层
各种不懂
 楼主| 发表于 2016-12-2 20:26:31 | 显示全部楼层
回复 6# haijie1223


    这种毛病只有遇得到了!
发表于 2016-12-3 12:11:50 | 显示全部楼层
各种不懂         

各种不懂
发表于 2016-12-8 11:41:25 | 显示全部楼层
我来看看的,各种不懂
 楼主| 发表于 2016-12-8 13:05:24 | 显示全部楼层
回复 9# Jane沐沐沐


其实我自己都被自己搞懵逼了。
发表于 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,"表格的名字")
是不是要这个?
发表于 2016-12-10 23:32:23 | 显示全部楼层
不知道WinGetState 怎样使用?
发表于 2016-12-11 09:26:54 | 显示全部楼层
回复  heroxianf 是不是要这个?
blue_dvd 发表于 2016-12-10 23:28

发表于 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进程的话这个只能查到一个进程的
发表于 2016-12-11 10:21:39 | 显示全部楼层
回复 14# kevinch

还是Kevinch大哥牛!记下笔记!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 14:06 , Processed in 0.088213 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表