ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-3-6 10:59 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
好好收藏,都是实用的好东东

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-6 11:04 | 显示全部楼层
原帖由 weiertao 于 2009-3-6 10:16 发表
非常不错 ,不过想知道楼主是怎么知道这么多的, 本人学习vba 靠的是 录制新的宏  录制完毕之后看代码  然后学习的, 方法简单快捷,但内容不是很具体, 楼主好像知道 很多参数啊,教一下抓鱼的方法啊

录制宏不失为一种学习VBA的好方法,从录制的宏代码中可以学习到对象的一些方法、属性等,不过录制的宏代码有许多是多余的,使用时要注意删除、修改。其实学习VBA最好的老师就是Excel VBA中自带的帮助,对于一些不了解的方法、属性,将光标插入后按F1即能显示帮助。

TA的精华主题

TA的得分主题

发表于 2009-3-6 11:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-3-6 19:45 | 显示全部楼层

如何使用Find的精确查找

33楼说了  find 的使用方法, 还有一点不懂,就是如何精确匹配,比如  查 “编号”
但会把“食品编号” 也查到,怎么精确到只出现“编号”的  那个参数

TA的精华主题

TA的得分主题

发表于 2009-3-6 22:07 | 显示全部楼层
太感谢啦!!以前有些代码想不明白现在终于明白了

TA的精华主题

TA的得分主题

发表于 2009-3-7 08:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常好的教材,被买的书还易懂些,谢谢楼主的热心贡献

TA的精华主题

TA的得分主题

发表于 2009-3-7 08:47 | 显示全部楼层
谢谢198楼的楼主提供的经典资料

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-7 10:24 | 显示全部楼层

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

技巧60         使用VBA自动生成图表
       在实际工作中我们常用图表来表现数据间的某种相对关系,一般采用手工插入的方式,而使用VBA代码可以在工作表中自动生成图表,如下面的示例代码。
  1. #001  Sub ChartAdd()
  2. #002      Dim myRange As Range
  3. #003      Dim myChart As ChartObject
  4. #004      Dim R As Integer
  5. #005      With Sheet1
  6. #006          .ChartObjects.Delete
  7. #007          R = .Range("A65536").End(xlUp).Row
  8. #008          Set myRange = .Range("A" & 1 & ":B" & R)
  9. #009          Set myChart = .ChartObjects.Add(120, 40, 400, 250)
  10. #010          With myChart.Chart
  11. #011              .ChartType = xlColumnClustered
  12. #012              .SetSourceData Source:=myRange, PlotBy:=xlColumns
  13. #013              .ApplyDataLabels ShowValue:=True
  14. #014              .HasTitle = True
  15. #015              .ChartTitle.Text = "图表制作示例"
  16. #016              With .ChartTitle.Font
  17. #017                  .Size = 20
  18. #018                  .ColorIndex = 3
  19. #019                  .Name = "华文新魏"
  20. #020              End With
  21. #021              With .ChartArea.Interior
  22. #022                  .ColorIndex = 8
  23. #023                  .PatternColorIndex = 1
  24. #024                  .Pattern = xlSolid
  25. #025              End With
  26. #026              With .PlotArea.Interior
  27. #027                  .ColorIndex = 35
  28. #028                  .PatternColorIndex = 1
  29. #029                  .Pattern = xlSolid
  30. #030              End With
  31. #031              .SeriesCollection(1).DataLabels.Delete
  32. #032              With .SeriesCollection(2).DataLabels.Font
  33. #033                  .Size = 10
  34. #034                  .ColorIndex = 5
  35. #035              End With
  36. #036          End With
  37. #037      End With
  38. #038      Set myRange = Nothing
  39. #039      Set myChart = Nothing
  40. #040  End Sub
复制代码
代码解析:
       ChartAdd过程在工作表中自动生成图表,图表类型为簇状柱形图。
       第6行代码使用Delete方法删除工作表中已经存在的图表,而ChartObjects方法返回代表工作表中单个嵌入图表(ChartObject对象)或所有嵌入图表的集合(ChartObjects对象)的对象,语法如下:
expression.ChartObjects(Index)
       其中参数Index是可选的,指定图表的名称或号码。该参数可以是数组,用于指定多个图表,因为示例中只有一个图表,所以无需指定其Index参数。
       第8行代码指定图表的数据源。
        第9行代码使用Add方法创建一个新图表,应用于ChartObjects对象的Add方法创建新的嵌入图表,语法如下:
expression.Add(Left, Top, Width, Height)
       参数Left、Top是必需的,以磅为单位给出新对象的初始坐标,该坐标是相对于工作表上单元格A1的左上角或图表的左上角的坐标。
       参数Width、Height是必需,以磅为单位给出新对象的初始大小。
       第10行代码使用Chart属性返回新创建的图表,应用于ChartObject对象的Chart属性返回一个Chart对象,该对象代表指定对象所包含的图表。
       第11行代码指定新创建图表的图表类型,应用于Chart对象的ChartType属性返回或设置图表的类型,可以为XlChartType常量之一,具体请参阅VBA帮助。本例中设置为xlColumnClustered即图表类型为簇状柱形图。
       第12行代码指定图表的数据源和绘图方式,应用于Chart对象的SetSourceData方法为指定图表设置源数据区域,语法如下:
expression.SetSourceData(Source, PlotBy)
       参数expression是必需的,该表达式返回一个Chart对象。
       参数Source是可选的,源数据的区域。
       参数PlotBy是可选的,指定数据绘制方式,可为xlColumns(系列产生在列)或xlRows(系列产生在行)。
       第13行代码使用ApplyDataLabels方法使图表显示数据标签和数据点的值,应用于Chart对象的ApplyDataLabels方法将数据标签应用于图表中的某一数据点、某一数据系列或所有数据系列,语法如下:
expression.ApplyDataLabels(Type, LegendKey, AutoText, HasLeaderLines, ShowSeriesName, ShowCategoryName, ShowValue, ShowPercentage, ShowBubbleSize, Separator)
       参数expression是必需的,该表达式返回一个Chart对象。
       参数Type是可选的,要应用的数据标签的类型,可为表格所列的XlDataLabelsType 常量之一。
Snap2.jpg
       参数LegendKey是可选的,如果该值为True,则显示数据点旁的图例项标示。默认值为False。
       参数AutoText是可选的,如果对象根据内容自动生成正确的文字,则该值为True。
       参数HasLeaderLines是可选的,如果数据系列具有引导线,则该值为True。
       参数ShowSeriesName是可选的,数据标签的系列名称。
       参数ShowCategoryName是可选的,数据标签的分类名称。
       参数ShowValue是可选的,数据标签的值。
       参数ShowPercentage是可选的,数据标签的百分比。
       参数ShowBubbleSize是可选的,数据标签的气泡尺寸。
       参数Separator是可选的,数据标签的分隔符。
       第14、15行代码设置新创建的图表有可见的标题并设置图表标题的文字。应用于Chart对象的HasTitle属性,如果坐标轴或图表有可见标题,则该值为True,而ChartTitle属性返回一个ChartTitle对象,代表指定图表的标题。
       第16行到第20行代码设置图表标题文字的格式。
       第21行到第25行代码设置图表区的颜色。
       第26行到第30行代码设置绘图区的颜色。
       第31行代码删除图表上第一个数据系列中的数据标签。SeriesCollection方法返回图表或图表组中单个数据系列(Series对象)或所有数据系列的集合(SeriesCollection集合)的对象,语法如下:
expression.SeriesCollection(Index)
       可选的Index参数指定数据系列的名称或编号。
       而DataLabels方法则返回代表数据系列中的单个数据标签(DataLabel对象)或所有数据标签的集合(DataLabels集合)的对象,语法如下:
expression.DataLabels(Index)
       可选的Index参数指定数据系列中的数据标签的编号。
       第32行到第36行代码设置图表上第二个数据系列中的数据标签的字体格式。
       运行ChartAdd过程,在工作表中创建簇状柱形图,如图所示。
Snap1.jpg

技巧60 使用VBA自动生成图表.rar

9.28 KB, 下载次数: 1954

TA的精华主题

TA的得分主题

发表于 2009-3-7 11:11 | 显示全部楼层

请问如果在文件夹的子目录,如保写代码?

如果我想把图片放在统一的“图片库”子文件中,请问如何编宏?或我想放在"D\水泵图片" 固定的文件夹下,如何编辑宏的代码?谢谢您的指导,期待您的答案

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-7 18:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 aming1688 于 2009-3-7 11:11 发表
如果我想把图片放在统一的“图片库”子文件中,请问如何编宏?或我想放在"D\水泵图片" 固定的文件夹下,如何编辑宏的代码?谢谢您的指导,期待您的答案
  1. Sub insertPic()
  2.     Dim i As Integer
  3.     Dim FilPath As String
  4.     Dim rng As Range
  5.     Dim s As String
  6.     With Sheet1
  7.         For i = 3 To .Range("a65536").End(xlUp).Row
  8.             FilPath = "D:\水泵图片" & .Cells(i, 1).Text & ".jpg"
  9.             If Dir(FilPath) <> "" Then
  10.                 .Pictures.Insert(FilPath).Select
  11.                 Set rng = .Cells(i, 3)
  12.                 With Selection
  13.                     .Top = rng.Top + 1
  14.                     .Left = rng.Left + 1
  15.                     .Width = rng.Width - 1
  16.                     .Height = rng.Height - 1
  17.                 End With
  18.             Else
  19.                 s = s & Chr(10) & .Cells(i, 1).Text
  20.             End If
  21.         Next
  22.         .Cells(3, 1).Select
  23.     End With
  24.     If s <> "" Then
  25.         MsgBox s & Chr(10) & "没有照片!"
  26.     End If
  27. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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