Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2797|回复: 4

[VBA] 012-优化“B列图片右移”-疑难千寻千解丛书(VBA)

[复制链接]
发表于 2011-1-19 13:32 | 显示全部楼层 |阅读模式
ET疑难千寻千解丛书之EXCEL2010编程与实践
罗刚君 章兰新 黄朝阳 编著

疑难12  
如何优化过程“B列所有图片右移”
如图所示的B列图片需要全部向右移动两个单位,VBA代码如下。如何对它进行优化使程序效率更高呢?


  1. Sub B列图右移2个单位()
  2.     Dim Sh As Shape, i As Integer
  3.     i = 2 '指定变量基数2,表示图片从第二行开始
  4.     For Each Sh In Sheets(1).Shapes  '循环所有图片
  5.     '如果图片左上角地址等于i行2列的单元格地址
  6.         If Sh.TopLeftCell.Address = Cells(i, 2).Address Then
  7.             i = i + 1  '累加变量
  8.             Sh.Select  '选择处于B列的图片
  9.             Selection.Left = Selection.Left + 2  '将选择的对象右移2个单位
  10.         End If
  11.     Next Sh
  12. End Sub
复制代码

è解决方案
删除代码中的Select语句,直接移动对象。
í操作方法
步骤1        
修改选择对象的语句,直接移动对象,代码如下:

  1. Sub B列图片右移2个单位2()  '不选择对象而移动
  2.     Dim Sh As Shape, i As Integer
  3.     i = 2
  4.     For Each Sh In Sheets(1).Shapes
  5.         If Sh.TopLeftCell.Address = Cells(i, 2).Address Then
  6.             i = i + 1
  7.             Sh.Left = Selection.Left + 2  '将符合条件的对象Sh右移两个单位
  8.         End If
  9.     Next Sh
  10. End Sub
复制代码
步骤2        
分别执行两段代码,它们可以实现相同功能,但在执行效率上大大不同,图片越多,差异越大。

=============================
上摘自《EXCEL2010编程与实践》

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-1-19 13:37 | 显示全部楼层
妖言:

传说SELECT是录制宏的产物,基本上是T得越远越好……
不过就这么人见人恨的SELECT,居然在限制打开工作表中派上了大用场,嘿嘿……
回复

使用道具 举报

发表于 2011-1-19 13:47 | 显示全部楼层
妖妖的解读和书一样的经典!{:25:}
回复

使用道具 举报

发表于 2011-1-19 13:47 | 显示全部楼层
hao                              
回复

使用道具 举报

发表于 2011-4-9 21:31 | 显示全部楼层
{:011:}{:011:}{:011:}{:011:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-18 17:55 , Processed in 0.221641 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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