ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教一下大家,userForm窗体置顶,如何保持在所有工作簿前面

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-9 00:56 | 显示全部楼层 |阅读模式

使用软件,office 365
本身userForm窗体已经设置好置顶,但是在excel中打开其它工作簿的时候,窗体就会被覆盖住,搜了很久帖子,没找到办法,求助一下大哥

测试.zip

17.4 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2023-12-9 09:24 | 显示全部楼层
模块1里的代码UserForm1.Show 0,改为UserForm1.Show 1

TA的精华主题

TA的得分主题

发表于 2023-12-9 09:53 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-9 20:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
laterite 发表于 2023-12-9 09:24
模块1里的代码UserForm1.Show 0,改为UserForm1.Show 1

没用,只要打开其它工作簿,就会覆盖住了

TA的精华主题

TA的得分主题

发表于 2023-12-9 20:39 | 显示全部楼层
__________

窗体最前.rar

40.9 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-9 22:38 | 显示全部楼层

感谢帮助,不过还是没效果,用在office 365软件,启用前还要在代码中添加ptrsafe

TA的精华主题

TA的得分主题

发表于 2023-12-27 10:14 | 显示全部楼层
我也有同样的问题,在excel2010中运行就没问题,2016就不能置前会被覆盖

TA的精华主题

TA的得分主题

发表于 2023-12-27 10:34 | 显示全部楼层
试试这个窗体,看是否是你需要的那样

测试.zip

21.21 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2023-12-27 10:41 | 显示全部楼层
现在应该可以,Excel版本不一样,api的问题

测试.zip

17.66 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-12-27 15:02 | 显示全部楼层
zaojiagong 发表于 2023-12-27 10:41
现在应该可以,Excel版本不一样,api的问题

你没有Get到贴主的想法。贴主不仅希望切换工作簿时,窗体可以置顶,而且可以在点击窗体时,不会自动激活最初打开窗体的工作簿。也就是说,希望这个窗体工具能适应所有工作簿,也就是希望能把这个VBA窗体的文件保存为VBA加载宏来实现公用。

这个问题,我在编写【小妖工具】加载宏的“正则查找替换”功能时,也遇到过。
这是因为,Excel2010及以前版本,所有工作簿是共用同一个应用程序窗口的,Application.Hwnd=ActiveWindow.Hwnd,而从Excel2013版开始,每个工作簿都有自己的独立的窗口,即ActiveWindow.Hwnd是不同的值了。当用户窗体激活时,如果其”所有者“窗口存在,则总是要先激活其“所有者”窗口,再显示在其所有者窗口之上。也就是说,在EXCEL2013及以上版本中,必然会激活把其所有者窗口激活,也就是把最初启动该用户窗体的工作簿窗口激活。所以,这种窗口之间的锁定关系,并不是简单地用SetWindowPos等API把用户窗口置顶就能解决的。

我的解决办法是使用“障眼法”。具体说,使用“类”的功能,当用户窗体启动时,新增一个子类化对象,把EXCEL应用程序作为子类对象,这样可以利用EXCEL窗体或工作簿激活事件来处理。在该事件代码中,以公共变量记录这个用户窗体的各个控件的当前内容和值,以及窗体的当前位置、大小等信息,然后Unload窗体,再Show窗体,并根据保存的信息,把窗体原模原样、在原位置“复原”显示出来,这样,看起来,就好像完全是同一个窗体(嘿嘿,假猴王也可以取真经)。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-24 10:09 , Processed in 0.041668 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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