ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用API函数实现坐标转换

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-16 14:43 | 显示全部楼层
本帖已被收录到知识树中,索引项:Windows API应用
原帖由 小fisher 于 2009-5-16 14:32 发表

我也没有实际操作过,不过有两种思路可以得到工作表中处于最左上角的单元格的坐标,您可以参考一下:
1。临时图表法。即在工作表中添加一个带句柄的临时控件,比如图表,将它与最左上角的单元格(通过ActiveWindo ...


毕竟是大师,思路就是不同,而且思维不同凡响!我试试,谢谢“小fisher”大师!

TA的精华主题

TA的得分主题

发表于 2009-5-16 15:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 fdd 于 2009-5-16 14:43 发表


毕竟是大师,思路就是不同,而且思维不同凡响!我试试,谢谢“小fisher”大师!


能不能把成果共享一下?谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-16 16:03 | 显示全部楼层
原帖由 sblisb 于 2009-5-16 15:48 发表


能不能把成果共享一下?谢谢!

可惜还没弄出来呢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-17 02:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在小fisher 大侠的指引下,总算解决了问题。见附件。

单元格屏幕坐标获取.rar

12.47 KB, 下载次数: 177

TA的精华主题

TA的得分主题

发表于 2009-5-16 23:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢小fisher 的讲解

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-17 08:42 | 显示全部楼层
奇怪,为什么每次改变ListView的位置后,用API函数得到的值(左上角屏幕坐标)总是前次位置的值?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-17 14:21 | 显示全部楼层
有哪位高手知道上面的问题是怎么造成的?

TA的精华主题

TA的得分主题

发表于 2009-5-17 14:47 | 显示全部楼层
其实MS Excel还提供了一个比较直接的方法。
Window对象提供了两个方法PointsToScreenPixelsX和PointsToScreenPixelsY,根据字面意义和帮助文件这两个方法表示将Point转换Pixel,而实际的结果不是这样的。
PointsToScreenPixelsX(0)和PointsToScreenPixelsY(0)分别返回单元格A1的左上角在屏幕坐标(屏幕最左上角为[0,0],向下和右为+)中的X轴和Y轴像素。
这样,通过获得指定单元格到A1的距离(以Point为单位),然后将Point转换成像素,加上前面两个方法获得像素坐标,就可以获得指定单元格在屏幕坐标的位置了。这个方法对将控件或窗体放置到指定单元格的位置很有效。
Point转换成像素很简单,以96DPI为例,Point * 96 * 20 / 1440 = Pixel

TA的精华主题

TA的得分主题

发表于 2009-5-17 14:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Winland版主,为什么我这句MsgBox ActiveWindow.PointsToScreenPixelsX(0)得到的总是0啊,而且不管括号内的数字是多少,结果都是0
示例
本示例确定活动窗口中选定单元格的高度和宽度(单位:像素),并将值返回到变量 lWinWidth 和 lWinHeight 中。

With ActiveWindow
    lWinWidth = _
        .PointsToScreenPixelsX(.Selection.Width)
    lWinHeight = _
        .PointsToScreenPixelsY(.Selection.Height)
End With

上面是帮助文件中的示例,在我这里运行结果也还是0。。。

[ 本帖最后由 小fisher 于 2009-5-17 14:56 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-17 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
小fisher版主,你是否从VBE中运行代码,这样得出来的结果都会是返回0的。只有Excel为活动窗口,而不是从VBE中运行才可以的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 18:17 , Processed in 0.034803 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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