ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-13 12:05 | 显示全部楼层
本帖已被收录到知识树中,索引项:Windows API应用
收藏学习中

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-13 12:11 | 显示全部楼层
感谢版主关注和反馈测试情况。

导航灯目前还只是直接采用EXCEL本身所提供的工作表事件、工作薄事件和窗口事件来刷新高亮区域,而这些事件中没有包含鼠标滚轮动作的事件,所以版主所提到的情况,确实存在。
事实上,在当前版本的“导航灯”中,当工作表的行高、列宽发生变化时,它的高亮区域也没有同步刷新。

要解决这个问题,此前liucqa学导在73楼中就提到过,需要实时获取EXCEL有关的窗口消息,才能完全让导航灯的高亮区域随着活动单元格区域而实时同步更新。

而“导航灯”的作用是在不干扰用户的情况下指示活动单元格区域的行、列,这决定了它如果要获取窗口消息来同步自身的图像,就只能使用PeekMessage函数,而不能使用getmessage函数。这时它将工作在典型的“外.挂”模式下,甚至可以称为“间.谍”模式、“木.马”模式,这从其函数名称“PeekMessage”可直译为“窥探消息”就能看出来。而这样的功能即使实现了,它的源代码也不大适合在本论坛的环境中公开发布。或可以在站内私信或其他方式下,进行小范围的交流吧。我想这也是liucqa学导没有公布他的“聚光灯”源码的主要原因吧。

当然,我现在对这一功能的实现也还在学习探索中。已经查找到了一些有用的资料,接下来将使用PeekMessage函数编写一个小程序,获取在发生鼠标滚轮动作以及改变工作表中的行高、列宽时所对应的窗口消息,目标是要确定此时是哪些单元格区域改变了行高、列宽或者在窗口中的位置,如果达到此目标,就可以同步计算出高亮区域的大小和位置,实现同步刷新。而且,这时也就可以实现当EXCEL窗口的显示比例在非100%整数倍时,也能让“导航灯”正常工作。

这些内容,liucqa学导已经有完整的实践经验,我如果摸索到能够提出一两个切中要点的问题了,再向他请教,现在还没有什么头绪,即使想请教也无从着手。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-13 13:40 | 显示全部楼层
自己发现一个问题:在EXCEL2010以上版本中,一些工作薄在打开时,会出现“受保护的视图”提示,此时的VBA功能受到很大限制,“导航灯”代码在此状态下运行则会报错。
所以,再次更新78楼的附件,让“导航灯”在“受保护的视图”状态下停止工作。

TA的精华主题

TA的得分主题

发表于 2018-2-13 19:52 | 显示全部楼层
本帖最后由 高度保密 于 2018-2-13 19:53 编辑
ggmmlol 发表于 2018-2-12 23:55
“导航灯”更新,现在可支持Office2003及以上版本的32位或64位EXCEL程序,因此命名第一个版本号为“导航灯V ...

win10,office2003,还是无法使用。
类似这样的:oXl7Rect.Left = pn.PointsToScreenPixelsX(0) + pt2px(oRngVsbl.Left)
都出错,提示对象不支持该属性或方法。查了一下微软帮助文件,excel2003版应该支持PointsToScreenPixelsX函数,但是括号中的参数好像不对 对象不支持属性或方法.PNG

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-13 22:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
高度保密 发表于 2018-2-13 19:52
win10,office2003,还是无法使用。
类似这样的:oXl7Rect.Left = pn.PointsToScreenPixelsX(0) + pt2px ...

忘了Office2003中EXCEL只有窗口对象(window)支持PointsToScreenPixelsX,而窗格对象(Pane)并不支持这一方法。看来,那个xla格式的加载宏需要单写代码了。
可是我也有些奇怪,你都用上Win10了,为什么还用Office2003呢?那已经是15年前的老古董了,至少也该直接上Office2013吧?没有必要安装两个版本的Office。
另外,你用Office2016版的测试了没有?如果测试了,也给反馈一下吧。

TA的精华主题

TA的得分主题

发表于 2018-2-13 23:52 | 显示全部楼层
ggmmlol 发表于 2018-2-13 22:57
忘了Office2003中EXCEL只有窗口对象(window)支持PointsToScreenPixelsX,而窗格对象(Pane)并不支持这一 ...

64位win10系统,装的office2003和64位office2016,装2003是为了制作低版本的宏文件在其他电脑好兼容。
64位2016测试了,API定义类型全部没法使用。经过反复调试,发现兼容64位不需要那么麻烦,只要把32位API改为如下类似的就可以了:
#If VBA7 And Win64 Then
    Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDc As Long) As Long
    Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
其他地方完全不需要修改。
只是2003版一点都没法使用。还希望你能单独写个2003版的,毕竟使用2003版的人很多的

TA的精华主题

TA的得分主题

发表于 2018-2-27 14:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-2-27 16:42 | 显示全部楼层
本帖最后由 qw52633 于 2018-2-27 16:47 编辑

这个不随着滚轮而动如何更改??建议楼主跟进一下

TA的精华主题

TA的得分主题

发表于 2018-3-5 10:43 | 显示全部楼层
导航灯0.9-fix64.rar (56.71 KB, 下载次数: 716)

刚看到楼主发布了64位版本,但是没法运行。

我给修改了几处定义,也没有研究对不对,总之现在能运行了。

windows10 64bits,Excel2016,64bit

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-3-9 21:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果是放到VB中,好像存在这样一个缺陷:

导航灯窗体会遮挡住Excel的内部窗体,如查找替换窗体
222223a.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 08:47 , Processed in 0.031204 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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