ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于窗体事件的引发问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-4-21 08:36 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:窗体
各位师傅,
      Excel中,当鼠标指向窗体或离开窗体时,自动引发的事件是那个???

点评

知识树索引内容:8楼,判断鼠标的移入和移除  发表于 2013-9-23 21:35

TA的精华主题

TA的得分主题

发表于 2009-4-21 08:36 | 显示全部楼层
EXCEL中好象没有这个事件吧.

TA的精华主题

TA的得分主题

发表于 2009-4-21 08:52 | 显示全部楼层
有几个接近的
MouseMove、Activate
Deactivate

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-4-21 10:28 | 显示全部楼层
用MouseMove的话,指向该窗体就会不停执行,而不是执行一次;
用另外两个,好像没有反应。

TA的精华主题

TA的得分主题

发表于 2009-4-21 10:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没有这个时间,但是也可以用其他方法来判断

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-4-21 12:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-4-21 12:52 | 显示全部楼层
鼠標離開的應該不行吧..
勉強些可以用mousemove來做..不過好像需要一定的計算量...

還是..樓主你是想說那個失去蕉點的事件?

TA的精华主题

TA的得分主题

发表于 2009-4-21 16:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
对于VBA窗体,可以通过子类化使它产生这样的事件,见附件:
MouseLeaveEvent.rar (11.39 KB, 下载次数: 57)
对于Excel主窗口,用同样的方法就不行了,原因我还没弄清楚,但Excel会失去响应

[ 本帖最后由 小fisher 于 2009-4-21 17:18 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-4-22 19:45 | 显示全部楼层

回复 8楼 小fisher 的帖子

Private Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Debug.Print Hex(Msg)
    Select Case Msg
        Case WM_MOUSEMOVE
            If Not bMouseIn Then
                UserForm1.MouseEnter
                bMouseIn = True
            End If
            Dim tme As TrackMouseEvent
            tme.cbSize = Len(tme)
            tme.dwFlags = TME_LEAVE
            tme.dwHoverTime = 100
            tme.hwndTrack = hwnd
            TrackMouseEvent tme
        Case WM_MOUSELEAVE
            UserForm1.MouseLeave
            bMouseIn = False
    End Select

    WindowProc = CallWindowProc(lOldProc, hwnd, Msg, wParam, lParam)
End Function

    调用测试,说UserForm1没有指定对象?是咋回事??我把实例的代码copy的相应的模块,窗口打开,鼠标指向窗口点击就窗口就不动了,死机一般,必须强行关闭文件才行。

TA的精华主题

TA的得分主题

发表于 2009-4-23 00:12 | 显示全部楼层
原帖由 resarter 于 2009-4-22 19:45 发表
Private Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Debug.Print Hex(Msg)
    Select Case Msg
        Case WM_MOUSEMOVE
       ...
        Case WM_MOUSELEAVE
            UserForm1.MouseLeave
            bMouseIn = False
    End Select

    WindowProc = CallWindowProc(lOldProc, hwnd, Msg, wParam, lParam)
End Function

    调用测试,说UserForm1没有指定对象?是咋回事??我把实例的代码copy的相应的模块,窗口打开,鼠标指向窗口点击就窗口就不动了,死机一般,必须强行关闭文件才行。

我上传的原件打开没问题吧?
检查一下你自己的文件中被子类化的窗口名称是不是Userform1,如果不是的话把红色部分改为你自己窗口的名称,而且要保证窗口代码中有Public Sub MouseLeave()这个过程
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-12 07:33 , Processed in 0.057678 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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