ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求教窗体跟随鼠标位置的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-18 17:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Column > 2 Then
  3.     With UserForm1
  4.         .Show 0
  5.         .Top = Target.Top
  6.         .Left = Target.Left
  7.     End With
  8. Else
  9.     UserForm1.Hide
  10. End If
复制代码

请教一下,为什么我用这样的语句没办法正常地让窗体定位在鼠标位置,行数大的就偏移得更厉害了,有的直接就找不到窗体了
无标题.png
上图为偏移情况

日期列表.zip

17.96 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-18 20:10 | 显示全部楼层
有兄弟知道怎么处理么

TA的精华主题

TA的得分主题

发表于 2018-3-18 20:49 | 显示全部楼层
日期列表.rar (18.59 KB, 下载次数: 98)

TA的精华主题

TA的得分主题

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

请教一下为何是1.8,这是如何换算的呢?

TA的精华主题

TA的得分主题

发表于 2018-3-18 21:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kookkey 发表于 2018-3-18 20:56
请教一下为何是1.8,这是如何换算的呢?

这只是权宜之法。窗体的位置和单元格的位置不是同一个坐标体系,换算关系如下:
磅和像素的换算:http://club.excelhome.net/thread-345771-1-1.html
如果需要适应不同的屏幕尺寸等,甚至EXCEL不同的界面(放大、缩小、工具栏的隐藏与否)还是得使用API,左上角可以搜到相关代码:http://club.excelhome.net/thread-1083449-1-1.html

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-18 21:42 | 显示全部楼层
看见星光 发表于 2018-3-18 21:17
这只是权宜之法。窗体的位置和单元格的位置不是同一个坐标体系,换算关系如下:
磅和像素的换算:http:/ ...

ok,万分感谢

TA的精华主题

TA的得分主题

发表于 2019-2-17 11:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实际上还是没有根本上解决窗体的跟随问题,在不向下拖动滚动条时,的确跟随很好,一拖动就不再跟随了。

TA的精华主题

TA的得分主题

发表于 2023-4-1 08:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看见星光 发表于 2018-3-18 21:17
这只是权宜之法。窗体的位置和单元格的位置不是同一个坐标体系,换算关系如下:
磅和像素的换算:http:/ ...

第二个链接里的示例有问题的  行数越大偏差就越大  这种方式行不通的  我找到了一种办法 虽然也有点偏差 但可以忽略这种微小的偏差  就是用鼠标坐标的方法 很简单 我不知道如何上传附件 就上代码吧

Public sbx, sby '以下为获取鼠标的屏幕坐标 这段代码只能放在任意模块中
Public Type POINTAPI2
x As Long
y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI2) As Long
Sub 鼠标坐标()
Dim p As POINTAPI2
GetCursorPos p
'MsgBox "鼠标当前的坐标为屏幕的(" & p.x & "," & p.y & ")"
'宽x = ActiveWindow.Width
'高y = ActiveWindow.Height
sbx = p.x / 1.333 '实际位置与获取位置有偏差 根据具体情况进行调整 可以用定义的"宽x"和"高y"除以获取的数值来取得初步的调整参数
sby = p.y / 1.444
End Sub

sbx和sby是最终的位置参数  因为得出的位置参数和实际位置是有出入的 我的电脑就是这样的 这个要自己调试  1.333 和1.444就是纠正错误位置的参数 屏幕大小不同可能参数也要调整 这个我没有测试 大家可以自己测试调整

TA的精华主题

TA的得分主题

发表于 2023-4-1 16:05 | 显示全部楼层
在mouse hook中调用用API MoveWindow或SetWindowPos
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 23:39 , Processed in 0.039825 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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