ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] [申请精华]背景高亮着色-完美解决冻结,拆分,缩放,隐藏(适用Excel2007以上)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-16 22:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:Windows API应用
主代码如下(API和事件代码请看附件):
  1. Option Explicit
  2. Public x&, y&

  3. Sub GDIDraw()
  4. Dim x&, y&, ZM#, r&, c&, x0&, y0&, flag&
  5. '可在此处设置开关

  6. ZM = ActiveWindow.Zoom / 100 '显示的缩放倍数
  7. Dim Rg As Range
  8. Set Rg = ActiveWindow.RangeSelection.Areas(1)

  9. Dim 左 As Double, 顶 As Double, 宽 As Double, 高 As Double
  10. With Rg
  11.     左 = .Left
  12.     顶 = .Top
  13.     宽 = .Width
  14.     高 = .Height
  15. End With

  16. Dim x1&, y1&, x2&, y2& '
  17. With ActiveWindow '对选定区域Rg的左上顶点和右下顶点,计算屏幕坐标(单位:像素)
  18.     '先计算两个坐标系统的偏移量
  19.     r = .SplitRow + 1: c = .SplitColumn + 1
  20.     '窗格拆分或冻结时产生的偏移量
  21.     If c > 1 Then x0 = Cells(1, c).Left * ZM * dpiX / INCH2POINTS '原点偏移量
  22.     If r > 1 Then y0 = Cells(r, 1).Top * ZM * dpiY / INCH2POINTS
  23.    
  24.     If .DisplayHeadings Then '行号列标在窗口拆分时带来的坐标原点偏移量
  25.         flag = 0
  26.         If .Split = True Then
  27.             If .FreezePanes = True Then
  28.                 flag = 3
  29.             Else
  30.                 flag = 2
  31.             End If
  32.         Else
  33.             If .FreezePanes = True Then flag = 1
  34.         End If
  35.         If flag > 0 Then
  36.             .FreezePanes = False: .Split = False
  37.             If c > 1 Then x = .PointsToScreenPixelsX(0)
  38.             If r > 1 Then y = .PointsToScreenPixelsY(0) - .PointsToScreenPixelsY(.Top * ZM * dpiY / INCH2POINTS) '
  39.             .SplitRow = r - 1: .SplitColumn = c - 1
  40.             If flag = 2 Then .Split = True
  41.             If flag = 3 Then .FreezePanes = True
  42.         End If
  43.     End If
  44.     '最终的坐标:
  45.     x1 = .PointsToScreenPixelsX(左 * ZM * dpiX / INCH2POINTS) + IIf(c > 1, x0 + x, 0) '坐标转换计算。X方向附加原点漂移值x0、x
  46.     y1 = .PointsToScreenPixelsY(顶 * ZM * dpiY / INCH2POINTS) + IIf(r > 1, y0 + y, 0)
  47.     x2 = x1 + 宽 * ZM * dpiX / INCH2POINTS
  48.     y2 = y1 + 高 * ZM * dpiY / INCH2POINTS
  49. End With
  50. draww x1, y1, x2, y2, RGB(255, 0, 0) '聚光灯颜色rgb值,本例简单设为红色(可调用EXCEL内置的颜色自定义对话框)。如颜色不支持,则容易闪屏。
  51. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-4-16 22:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
聚光灯(仅做选区着色).rar (20.6 KB, 下载次数: 207)

TA的精华主题

TA的得分主题

发表于 2014-4-16 23:15 | 显示全部楼层
cbtaja 发表于 2014-4-16 22:59

拆分窗格之后,不太准,再改改

TA的精华主题

TA的得分主题

发表于 2014-4-16 23:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2014-4-16 23:15
拆分窗格之后,不太准,再改改

拆分窗格时,不同的窗格有不同的原点偏移量。
因为EXCEL2003下的ActivePane对象不能使用.PointsToScreenPixels方法,我是通过计算原点偏移量来模拟EXCEL2007下面的ActivePane.PointsToScreenPixels方法,仅以窗格的第4区为当前ActivePane为基准进行计算。因此,在拆分窗格时,左上3个区都会有偏移量,偏移值分别为第一区的两个方向的边长。但在冻结时,默认即为第4区,应不存在问题。因为拆分窗格时,逐一窗格判断、计算太过啰嗦、且较少应用(我个人的体会),所以没有列出,行列着色也没有写。因为选区着色要求更精准,任何方向偏移了都马上看出来。
关键在于计算原点偏移量。
其它情况下,理论上应不会有大偏差,但从Point换算到Pixel时,数据从双精度型到长整型,可能会存在数值计算的精度误差。

TA的精华主题

TA的得分主题

发表于 2014-4-17 00:54 | 显示全部楼层
cbtaja 发表于 2014-4-16 23:50
拆分窗格时,不同的窗格有不同的原点偏移量。
因为EXCEL2003下的ActivePane对象不能使用.PointsToScreen ...

没太看明白你的意思,我看到的是这样的,Excel2010
1.JPG

貌似没法用


TA的精华主题

TA的得分主题

发表于 2014-4-18 14:18 | 显示全部楼层
本帖最后由 wangminbai 于 2014-4-18 21:10 编辑

有兴趣可以看一下 Kutools for Excel 7.50 的 阅读视图 功能, 具体可以参见:http://hi.baidu.com/officecm/item/4634973be26817c32f8ec2f0

支持 Excel 2007、2010 和 2013
支持鼠标滚动,滚动条拉动等
支持窗格拆分和窗格冻结
支持多种视图,包括普通、页面布局和分页预览
支持 Excel 宏表
可以自定义为填充、边框和线条样式,可以设定填充的透明度和颜色等
支持工作表多选区
支持工作表从右到左显示

运行截图:


001.png

Excel 2013


002.png

多选区支持


003.png

窗格拆分


004.png

Excel 宏表


005.png

页面布局视图支持


006.png

边框样式


007.png

配置选项


008.png

Excel 2010


TA的精华主题

TA的得分主题

发表于 2014-4-18 20:41 | 显示全部楼层
wangminbai 发表于 2014-4-18 14:18
有兴趣可以看一下 Kutools for Excel 7.50 的 阅读视图 功能, 具体可以参见:http://hi.baidu.com/officec ...

图片都看不见,你还是截图上传吧

TA的精华主题

TA的得分主题

发表于 2014-4-18 23:04 | 显示全部楼层
liucqa 发表于 2014-4-18 20:41
图片都看不见,你还是截图上传吧

记得某些论坛有自动转存的功能,这个没有?

点评

我也不知道  发表于 2014-4-19 00:11

TA的精华主题

TA的得分主题

发表于 2014-5-16 19:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-11-16 11:04 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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