正如丸究阵引在帖子http://club.excelhome.net/viewthread.php?tid=88953中提到的,该方法确实有些问题,并非如同它的字面解释“由磅转换成屏幕的像素” ----以下为帮助中的内容--- 本示例确定活动窗口中选定单元格的高度和宽度(单位:像素),并将值返回到变量 lWinWidth 和 lWinHeight 中。 With ActiveWindow lWinWidth = .PointsToScreenPixelsX(.Selection.Width) lWinHeight = .PointsToScreenPixelsY(.Selection.Height) MsgBox (lWinWidth & "," & lWinHeight) End With ---- 事实上,PointsToScreenPixelsX(0),PointsToScreenPixelsY(0)给出了工作表有效工作区的坐标系原点(单元格A1的左上角)在屏幕坐标系(以屏幕左上角为原点,以向下为y+,以向右为x+)的坐标,该坐标随着显示范围的变化而变化。即使该单元格已移出显示范围,该坐标仍然存在,并可能为零或负数。 并且有如下关系 PointsToScreenPixelsX(m)=PointsToScreenPixelsX(0)+m, PointsToScreenPixelsY(m)=PointsToScreenPixelsY(0)+m. m为整数(包括负数) 换句话说,PointsToScreenPixelsX(m),PointsToScreenPixelsY(m)中的参数m应该理解为像素。 下面给出一个使用该方法的例子,该例子将当前鼠标的像素纵坐标转化为在工作表有效工作区坐标系中的磅纵坐标并显示在状态栏中
Option Explicit Declare Function GetCursorPos _ Lib "user32" ( _ lpPoint As POINTAPI) _ As Long Type POINTAPI x As Long y As Long End Type Sub test() Dim mP As POINTAPI Dim y As Integer Do
With ActiveWindow y0 = .PointsToScreenPixelsY(0) End With GetCursorPos mP y = (mP.y - y0 ) * 4 / 3 '4/3为像素转换为磅的系数 Application.StatusBar = y DoEvents Loop Until ActiveSheet.Range("c1") = 1 End Sub
[此贴子已经被作者于2007-1-4 16:19:51编辑过] |