ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ggmmlol

[原创] 【重磅发布】:聚光灯——我的加载宏系列小工具【单元格小工具】之四

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-5 22:55 | 显示全部楼层
本帖已被收录到知识树中,索引项:Windows API应用
真羡慕你们这些牛人,专门来顶一个

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 08:49 | 显示全部楼层
本帖最后由 ggmmlol 于 2018-2-6 11:38 编辑
高度保密 发表于 2018-2-5 22:55
真羡慕你们这些牛人,专门来顶一个

谢谢支持。只要你坚持在Excelhome学习,也一定能成为你心目中的“牛人”的!

我这个帖子里,几乎所有的知识点,都可以在本论坛里找到很好的实例;其中用到的小工具,也几乎都是来自本论坛,直接利用或者我稍加修改就可用。

知识树、各个版块的精华贴子,建议你多去看一看。还有各位版主、能手大神们所发的主题帖子,也很值得去学习。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 09:00 | 显示全部楼层
《窗体“变形记”》第三集,开始播出。

到了这个时候,变形记的主人公“Smart Boy”(既然已经去掉了标志型的发型,就改一个相对好听一点的称呼)心中无论有多么不情愿,也只能被送到小乡村里去接受新的体验啦,而栏目组的娱记也将伴随进行录像报道。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 09:10 | 显示全部楼层
要从地图中定位到那个小乡村,需要找到一个基准点,比如小镇通往它的公路路口。
同样的道理,从窗口中定位一个单元格,首先要定位窗口中的第一个可见单元格的位置。
而且,如果要作为某行的 指示、就需要知道窗口中表格区域的左、右边界,同样,要作为某列的指示,需要知道表格区域的上、下的边界。
这些,都需要从窗口的结构信息中获取。
所以,接下来,我们需要分析Excel程序的窗口。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 09:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
单元格“导航灯”,关键是需要了解Excel程序窗口中显示工作表区域的子窗口的信息。首先,就需要得到这个窗口的句柄,我们可以用前面介绍过的FindWindowEx函数来找到它,但是,也需要先了解到它的类名、标题文本信息,才方便查找。

学导大神liucqa 在他的帖子 简单介绍单元格行列指示的实现原理(俗称聚光灯功能)里,简单提到过:Excel工作簿显示区域的子窗口的类名为“EXCEL7”,他是用“spy++”软件查看到EXCEL程序的窗口而得到的。
“spy++”软件是VSTO集成开发环境下的一个工具软件,像我们只用VBA做点小应用的,手头并没有这样的工具软件,那该怎么办呢?

“别怕,Excel VBA 其实也能做到!”

“小fisher”的精华贴子:VBA版SpyLite,学习窗口类API与类模块的绝佳范例就推出了这样一个类似于“spy++”的VBA工具。非常经典,能成为精华贴子,又被收集到“知识树”里,确实实至名归。

但是,这个小工具把窗口的信息分散显示在多个标签里,并不方便于对窗体进行综合分析研究。

所以,我这里找来的是另一个小工具,也是收录在“知识树”里,由“cbtaja”发表的:WINDOWS API入门实例:枚举EXCEL子窗口的API函数这一贴子中小工具。
它用列表框显示所枚举出来的窗口的类名、标题文本。我把它改进了一下,让它显示更多的信息,包括窗口的位置、大小、父窗口句柄、是否可见等,同时,允许把列表框中的内容输出到工作表里面,方便用EXCEL表格来分析这些数据。
稍后,我们就要用它来分析Excel程序的窗口结构。所以,在这里,我把这一款我改造过的小工具也分享给大家。请移步到楼下收取。


TA的精华主题

TA的得分主题

发表于 2018-2-6 11:12 | 显示全部楼层
这么好的帖子必须顶上去。楼主比喻的很形象,学习中,期待下文~

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 11:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用来分析“window”的小工具,就不专门发贴了,直接发布在这里:
Windows窗口信息获取的小工具.rar (26.21 KB, 下载次数: 259)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 12:04 | 显示全部楼层
运用上面的小工具,我们可以得到Excel窗口的子(系)窗口的信息,可以看到,工作簿名称对应的窗口的“类名”就是“EXCEL7”。这也印证了这个小工具是可靠的。
此外,也可以看到,它的父窗口的类名是“XLDESK”,再往上一级,就为“无”了,这并不是说"XLDESK"窗口没有父窗口,而是它的父窗口就是查询的起始窗口,也就是EXCEL主程序的窗口。

把它的句柄复制到文本框里,再次点“开始”按钮执行分析,并把结果输出到工作表中,用EXCEL的筛选、排序、格式设置等功能,突出我们关注的窗口的信息,就得到如下图所示的结果。

我们定位单元格位置的参照点,就是图中所示 蓝se 的大方框的左上角的“原点”,只需要得到它在屏幕中的绝对坐标,就可以确保最终的“大功告成”!
EXCEL窗口分析.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 13:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ggmmlol 于 2018-2-6 13:47 编辑

从上图中可以看到,大的蓝方框左上角的“原点”,它总是与一个单元格的左上角点重合,即是一个“锚点”,所以可以用来做为确定其它单元格相对位置的基准参照点。但是,它位于"EXCEL7"的内部,而"EXCEL7"窗口中的任何子窗口都没有与它直接对应的位置关系,并不能直接得到位置数据。
而蓝方框的右下角点,虽可以通过滚动条的边界来定位,但它与左上角的“原点”不一样,它并不是单元格的长方形某个顶点的锚点,自然不可以作单元格定位的基准点。

也有朋友会说,从红方框的左上角点的位置坐标,加上工作表行列标题的宽度(高度),不就得到蓝方框的“原点”了吗?
这的确是一个解决问题的思路,但经过仔细观察,就会发现这个方法不大行得通:
首先,对于工作表行列标题的宽度(高度),Excel没有提供直接的对象成员来确定大小;
其次,它的大小是变化的:
      1、当显示工作表的最大行的某个单元格时,行标题的宽度明显发生了变化,增加了许多,
      2、工作簿窗口的显示比例,也会影响行列标题的大小,
      3、这一区域其实并不只显示行列标题,还有可能显示“分组(分级)显示”的符号,以及任务窗格、文档恢复提示的窗格,而这些部件,都没有对应的VBA对象可以查得其大小参数(或许在微软为Excel专业开发者提供的SDK中,有可以使用的内部对象,仅只是猜测)。综上所述,这个方法,在VBA环境里,也是不可靠的。

到了这一步,问题似乎走入了一个困境。娱记拎着摄像机直发愁,而“Smart Boy"则心中窃喜:找不准小乡村的方位,那就不去了呗!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-6 14:12 | 显示全部楼层
娱记领着“Smart Boy”在县城这一站停住了,一呆好两天,一筹莫展。栏目组负责人电话询问到哪儿了,娱记支唔着回答“噢,就快到了……”。负责人叮嘱:“早点完成,早点回来,这一集的赞助商的资金已经到位了,回来就给你发大红包,还有鲜花礼品!”娱记:“……”

话说,我的《窗体“变形记”》有谁愿意鲜花赞助的吗?有赞助的话,我也不多要,只要999朵玫瑰就可以啦!

评分

6

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 09:08 , Processed in 0.048651 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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