ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-3-4 09:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:开发帮助和教程
经典,感谢奉献!!!

TA的精华主题

TA的得分主题

发表于 2009-3-4 10:16 | 显示全部楼层

感谢
如此精华贴
可以整理出书了,一定支持

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-4 11:39 | 显示全部楼层

第4部分 Shape(图形)、Chart(图表)对象

技巧57         移动、旋转图片
       工作表中的图片可以移动、旋转,如下面的代码所示。
  1. #001  Sub MoveShape()
  2. #002      Dim i As Long
  3. #003      Dim j As Long
  4. #004      With Sheet1.Shapes(1)
  5. #005          For i = 1 To 3000 Step 5
  6. #006             .Top = Sin(i * (3.1416 / 180)) * 100 + 100
  7. #007             .Left = Cos(i * (3.1416 / 180)) * 100 + 100
  8. #008             .Fill.ForeColor.RGB = i * 100
  9. #009              For j = 1 To 10
  10. #010                  .IncrementRotation -2
  11. #011                  DoEvents
  12. #012              Next
  13. #013          Next
  14. #014      End With
  15. #015  End Sub
复制代码
代码解析:
       MoveShape过程移动、旋转工作表中的图片并不断改变其填充的前景色。
       第6行代码设置图片的Top属性值,应用于Shape对象的Top属性设置图形的顶端到工作表顶端的距离。在循环的过程中使用Sin函数将Top属性值设置为一个圆形的弧度值。Sin函数返回指定参数的正弦值,语法如下:
Sin(number)
       参数number表示一个以弧度为单位的角。
       Sin函数取一角度为参数值,并返回角的对边长度除以斜边长度的比值,将角度除以180后即能角度转换为弧度。
       第7行代码设置图片的Left属性值,应用于Shape对象的Left属性设置图形从左边界至 A 列左边界(在工作表中)或图表区左边界(在图表工作表中)的距离。在循环的过程中使用Cos函数将Left属性值设置为一个圆形的弧度值。Cos函数返回指定一个角的余弦值,语法如下:
Cos(number)
       参数number表示一个以弧度为单位的角。
       Cos函数的number参数为一个角,并返回直角三角形两边的比值,该比值为角的邻边长度除以斜边长度之商,将角度除以180后即能角度转换为弧度。
       第8行代码设置图片填充的前景色随着循环的过程不断的变化。使用Fill属性返回一个FillFormat对象,FillFormat对象代表图形的填充格式,其ForeColor 属性设置对象填充的前景色。
       第9行到第11行代码在图形移动的过程中使用IncrementRotation方法设置图形绕 z 轴的转角,IncrementRotation方法以指定的度数为增量,更改指定的图形绕 z 轴的转角,语法如下:
expression.IncrementRotation(Increment)
       参数expression是必需的,返回一个Shape对象。
       参数Increment是必需的,以度为单位指定图形在水平方向的旋转量,正值使图形按顺时针方向旋转,负值使图形按逆时针方向旋转。
       其中第11行是关键的代码,使用DoEvents函数转让控制权,否则达不到预计的视觉效果。
       运行MoveShape过程,工作表的图形在自身进行逆时针方向旋转的同时沿着一个圆形的弧度进行移动,并不断改变其填充的颜色。

技巧57 移动、旋转图片.rar

6.82 KB, 下载次数: 1683

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-3-4 18:39 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-4 21:13 | 显示全部楼层

第4部分 Shape(图形)、Chart(图表)对象

技巧58         工作表中自动插入图片
       在日常工作中经常需要在工作表中插入大量图片,比如在如图所示的工作表中需要根据A列的名称在C列插入保存在同一目录中的相应的图片,如果使用手工插入不仅非常繁琐且极易出错,而使用VBA代码可以很好的完成操作。
Snap2.jpg
       示例代码如下:
  1. #001  Sub insertPic()
  2. #002      Dim i As Integer
  3. #003      Dim FilPath As String
  4. #004      Dim rng As Range
  5. #005      Dim s As String
  6. #006      With Sheet1
  7. #007          For i = 3 To .Range("a65536").End(xlUp).Row
  8. #008              FilPath = ThisWorkbook.Path & "" & .Cells(i, 1).Text & ".jpg"
  9. #009              If Dir(FilPath) <> "" Then
  10. #010                  .Pictures.Insert(FilPath).Select
  11. #011                  Set rng = .Cells(i, 3)
  12. #012                  With Selection
  13. #013                      .Top = rng.Top + 1
  14. #014                      .Left = rng.Left + 1
  15. #015                      .Width = rng.Width - 1
  16. #016                      .Height = rng.Height - 1
  17. #017                  End With
  18. #018              Else
  19. #019                  s = s & Chr(10) & .Cells(i, 1).Text
  20. #020              End If
  21. #021          Next
  22. #022          .Cells(3, 1).Select
  23. #023      End With
  24. #024      If s <> "" Then
  25. #025          MsgBox s & Chr(10) & "没有照片!"
  26. #026      End If
  27. #027  End Sub
复制代码
代码解析:
       insertPic过程使用Insert方法在工作表中插入图片。
       第7行代码开始For...Next循环,循环的终值由工作表中A列单元格的行数所决定。
       第8行代码字符串变量FilPath保存A列名称单元格所对应的图片文件的路径和文件名,本例中图片文件的文件名应和A列中的名称一致。
       第9行到第11行代码使用Dir函数在同一文件夹中查找与A列单元格中的名称相对应的图片文件,如果对应的图片文件存在则使用Insert方法将图片插入到工作表中,并将C列的单元格赋给变量rng。
       Dir函数返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。如果已没有合乎条件的文件,则Dir函数会返回一个零长度字符串 ("")。
       第12行到第17行代码,当图片片插入到工作表时其实是插入到活动单元格的,此时需设置图片的Top属性和Left属性将图片移动到C列所对应的单元格中,并设置其Width属性和Height属性使其适应所在单元格的大小。
       第18、19行代码如果在同一文件夹中没有与A列单元格对应的图片文件,则使用字符串变量s保存没有图片文件的名称。
       第24行到第26行代码如果字符串变量s不等于空白说明文件夹中缺少图片文件,使用消息框提示。
       运行insertPic过程工作表如图所示。
Snap1.jpg
       如果文件夹中缺少对应的图片文件,则会进行提示,如图所示。
Snap3.jpg

技巧58 工作表中自动插入图片.rar

1.45 MB, 下载次数: 6884

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-3-4 21:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-5 09:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第4部分 Shape(图形)、Chart(图表)对象

技巧59         固定工作表中图形的位置
       工作表中插入的图片,一般都是固定的尺寸和固定的单元格区域中的,但在实际使用中可能因一些人为的因素导致图片位置偏移或尺寸变化,此时可以使用VBA代码进行调整,如下面的代码所示。
  1. #001  Sub ShapeAddress()
  2. #002      Dim rng As Range
  3. #003      Set rng = Sheet1.Range("B4:E22")
  4. #004      With Sheet1.Shapes("Picture 1")
  5. #005          .Rotation = 0
  6. #006          .Select
  7. #007          With Selection
  8. #008              .Top = rng(1).Top + 1
  9. #009              .Left = rng(1).Left + 1
  10. #010              .Width = rng.Width - 0.5
  11. #011              .Height = rng.Height - 0.5
  12. #012          End With
  13. #013      End With
  14. #014      Range("A1").Select
  15. #015  End Sub
复制代码
代码解析:
       ShapeAddress过程调整指定图形在工作表中的位置。
       第3行代码变量rng保存工作表中插入图片的单元格区域。。
       第5行代码设置图片的转角,应用于Shape对象Rotation属性以度为单位返回或设置图形的转角,设置为正值向右偏转,设置为负值向左偏转,设置为零图片则保持90度垂直。
       第7行到第12行代码设置图片的Top属性和Left属性将图片移动变量rng所保存的单元格区域中,并设置其Width属性和Height属性使其适应所在单元格区域的大小。
       第14行代码选择A1单元格,不然图片处于选中状态。
       经过以上设置,工作表中的图片“Picture 1”不管处于什么状态都可以一键恢复其原来的大小、位置。

技巧59 固定工作表中图形的位置.rar

63.7 KB, 下载次数: 1672

TA的精华主题

TA的得分主题

发表于 2009-3-5 12:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大作呀,学习中。。。

TA的精华主题

TA的得分主题

发表于 2009-3-5 13:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请问33楼中 Not Rng Is Nothing  和Loop While Not Rng Is Nothing 这是什么意思呢,不是特别明白,以后能否解析的详细些,毕竟有些是新手,谢谢

TA的精华主题

TA的得分主题

发表于 2009-3-5 15:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 yuanzhuping 于 2009-2-12 17:56 发表
技巧17         双击被保护单元格时不显示提示消息框
       当用户使用鼠标左键双击被保护工作表中锁定的单元格区域时,系统将显示如图所示的消息框。
460592
       如果不希望显示该消息框,可以在工作表Works ...

如果你选择单元格,然后按delete键的话还是会出现保护的按钮!望解答~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 03:29 , Processed in 0.037422 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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