ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-30 23:00 来自手机 | 显示全部楼层
prome3 发表于 2024-5-30 19:55
呐,这不就行了嘛
虽然没看出来改了哪里

改了87楼说明。89楼需求可否解决?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 10:15 | 显示全部楼层
mythqiu 发表于 2024-5-30 23:00
改了87楼说明。89楼需求可否解决?

好的,看到了,改得很好,但还有更好的写法。在程序中应该尽量少用 ActiveWorkbook、ActiveSheet、ActiveCell 这些,就像尽量少用 .Select 和 Selection 一样。图省事就用,要是追求稳定性和运行效率就别用。

至于89楼的需求,原先的代码是用了一个(非模态的, vbModeless)用户窗体来做,很好弄,但需要两个代码文件;现在改为用系统对话框取代用户窗体,只需要一个代码文件。不管怎样,要想实现89楼的效果,把模态改为非模态就行了。

我在很早之前的楼层就说过,“众口难调,很多自定义的地方可以自己去弄”。对于实在不会弄的,我就花时间去帮写了,但我相信你应该能自行实现把 1.2.6 改为 89 楼想实现的效果。其实原先模态和非模态两个版本我都做出来了,最后发出来的 1.2.6 是其中模态的版本。不是说个人品味如此,而是感觉模态更合适。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 19:27 | 显示全部楼层
mythqiu 发表于 2024-5-30 17:06
再请教:如果单元格调用,点击另外的单元格,前面调用的可否自动消失?一调用,焦点不在excel单元格了, ...

用户窗体模态和非模态的区别

TA的精华主题

TA的得分主题

发表于 2024-5-31 20:49 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
prome3 发表于 2024-5-31 10:15
好的,看到了,改得很好,但还有更好的写法。在程序中应该尽量少用 ActiveWorkbook、ActiveSheet、Active ...

研究了半天,确实没发现哪儿改这个状态。如果是窗体的这个我倒是会,但这个我确实不会。嗯那个代码绘制的窗体,确实不会,还是希望您提醒一下修改哪一句,或者。另外一种状态的文件发一个上来,我对比一下就知道了。如果要有做成加载宏的话,用thisworkbook是指加载宏本身,这个也是我测试出错的原因,因为我直接把那个文件导入进加载宏里面。后面我用启用宏文件测试一下是正常的,我想应该是那个问题,因为我以前遇到过。

TA的精华主题

TA的得分主题

发表于 2024-5-31 20:56 来自手机 | 显示全部楼层
prome3 发表于 2024-5-31 19:27
用户窗体模态和非模态的区别

1.2.6的代码没有注释,但是我对api不懂,所以不知道这个模态非模态是哪句代码,调整一个参数的问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 21:43 | 显示全部楼层
mythqiu 发表于 2024-5-31 20:56
1.2.6的代码没有注释,但是我对api不懂,所以不知道这个模态非模态是哪句代码,调整一个参数的问题。

不懂API的话加了注释也没用的,懂API的话不用注释也能看得懂,因为这里面除了VBA,就是API。

关键是,已有代码其实是不需要多余的注释的,就好比下面这行代码:
  1. '给变量a加5
  2. a = a + 5
复制代码

这里上面那行注释就很多余。

还有:
  1. '关闭屏幕刷新
  2. Application.ScreenUpdating = False
复制代码
这行代码的注释其实也很多余。懂的人一看就懂。不懂的人还得问:什么是屏幕刷新?为什么要关闭屏幕刷新?
这种情况下,那一行注释就不够用了。




——终究还得百度。


如果不懂API,加多少行注释都不够用的。我的代码里面其实用到的API不多,跟模态非模态相关的API其实就一个。直接在 Declare 语句里面找到那个API,百度一下就知道了。

TA的精华主题

TA的得分主题

发表于 2024-7-17 12:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
prome3 发表于 2023-12-23 18:31
感谢评论!

原先的示例代码是在工作表中调用和显示日历窗体,思路是获取活动单元格的位置信息(单位是 ...

老师,附件我这运行代码,直接文件直接闪退了,电脑版本是WIN 11   365 64位

image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-18 14:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
HANERBABA 发表于 2024-7-17 12:52
老师,附件我这运行代码,直接文件直接闪退了,电脑版本是WIN 11   365 64位

感谢提供操作系统和软件版本信息。

原先闪退的原因已找到,但在此就不赘述了。
修正版请见此楼附件。

Calendar_On_UserForm_Demo.zip

52.65 KB, 下载次数: 21

日历控件作为用户窗体子窗体

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

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

本版积分规则

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

GMT+8, 2024-11-19 05:34 , Processed in 0.035083 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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