ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] UI设计自制日历窗体(无需注册MSCOMCTL.OCX)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-3 23:34 | 显示全部楼层 |阅读模式
本帖最后由 prome3 于 2023-10-5 20:15 编辑

大家好,


这次跟大家分享一个自制的日历窗口。这个窗口应用了Windows原生自带的日历控件,但无需注册MSCOMCTL.OCX。
下面截图是运行效果:
日历窗口运行效果.png
在此声明:任何人都可以应用此示例于自己的项目中,无需获得我的口头或书面许可。示例中的完全免费,无需任何费用。

在使用过程中如有问题,欢迎大家留言讨论。(此示例开发和测试环境:Windows 10 64位,Excel 2019 64位)


补充内容 (2023-12-24 18:07):
[2023年12月24日 18点07分] 这两天趁着周末有空,再次对此款日历做了一些细节上的更新,请见第31楼!

补充内容 (2023-12-25 21:49):
之前在发布2023-10-05版本的时候心里总感觉还有哪里不对。
果然!在今天,有网友指出了一个条件编译的问题,现已做更新,请见第35楼和37楼。

补充内容 (2024-4-9 21:44):
朋友们,别再下载1楼的附件了。1楼附件代码有一些已知bug,如果非要运行的话请务必先保存好自己的数据。
***当前最新版请看1楼下方置顶***

日历窗口示例.zip

52.1 KB, 下载次数: 177

原版(有bug,别用)

日历窗口示例_2023-10-05更新.zip

55.23 KB, 下载次数: 315

更新版请看后面的楼层

评分

10

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-3 21:42 | 显示全部楼层
一周年纪念

你们要的单元格定位代码也在里面了,其来源请看附件“AccessibilityEx (2).zip”文件(依旧是国外网友Jaafar Tribak的作品)。

要注意的是附件中的“Calendar_1.3.0-beta12”是beta版本,有几个新增的功能没有实现。此版本相对于之前的版本可以称为稳定版,只要不在日历窗体过程中中断代码的运行即可。要想实现真正的稳定(即所谓的IDE稳定性),不可避免要用到汇编语言(机器码)去弄,这就违背了本贴只用纯VBA代码去做日历窗体的初衷了。本帖止步于此。

最后要说的是,附件中Jaafar Tribak写的那个代码其实是在模拟IUIAutomation接口,但他的目的并不是要找单元格的屏幕位置,而是提供用VBA来实现对Microsoft Office应用程序进行UI自动化操作的示例。微软的IUIAutomation等UI自动化接口,原先是给写C++的人用的(Microsoft Office本身是C++写的),但是后期发展过来,对C#的语言支持反而更好了(C#是微软的亲儿子,为了斗Java弄出来的)。换句话说,要用IUIAutomation定位单元格位置,建议别用VBA或者C++或者其它语言及其附属工具,直接用C#。

Calendar_1.3.0-beta12.zip

112.12 KB, 下载次数: 26

AccessibilityEx (2).zip

68.53 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2023-10-4 08:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 08:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 10:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 13:59 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享

TA的精华主题

TA的得分主题

发表于 2023-10-4 14:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:13 | 显示全部楼层
f8b1987 发表于 2023-10-4 08:28
代码量有点大吧

感谢评论!
这个例子的总代码行数不过300余行,其实也算是个微型的项目了。
原先的版本总代码行数大约是现在这个的两倍,主要是一些我自己加入的自定义功能,比如显示日历窗口后可以用鼠标移动它的位置,可以按键盘的Esc键或回车键隐藏它。后来准备分享到这个论坛的时候,觉得那些功能太花里胡哨了,就给删掉了。
平时我学习的一些国外高手写的代码,总代码行数动辄上千行,完整分析下来着实费好大一番功夫(但他们写的代码构造合理,逻辑清晰,阅读起来真的是一种享受)。相比之下我这个例子的代码量真的太少了。
若说代码总逻辑量,这个示例其实也就几个WIN API的调用,没啥复杂的、绕来绕去的逻辑。
最后,再次感谢您的关注!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:14 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-4 18:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-4 18:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不知道是不是哪个API的问题?



1

1

2

2

3

3

4

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

本版积分规则

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

GMT+8, 2024-11-19 05:57 , Processed in 0.050593 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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