《Excel-VBA-处理图形图表大全剖析.doc》由会员分享,可在线阅读,更多相关《Excel-VBA-处理图形图表大全剖析.doc(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Excel-VBA-处理图形图表大全剖析VBA图表剖析一、图表各元素在VBA中的表达方式1、图表区VBA名称:ChartArea2、绘图区VBA名称:PlotArea调整绘图区的大小以及在图表中的位置,指定绘图区的Top、Left、Height和Width属性。3、数据系列VBA名称:Series指定给定系列语法:ChatObject.SeriesCollection(Index),其中Index是数字范围,从1开始,最大值是图表中系列的数量或系列名称的数量。4、图表轴VBA名称:Axis指定给定轴的简单语法:ChatObject.Axes(Type),其中Type指定轴的Excel VBA常
2、量。辅助轴语法:ChatObject.Axes(Type,AxisGroup)。5、网格线VBA名称:HasMajorGridlines和HasMinorGridlines根据需要可以选择显示或者不显示主要网格线或次要网格线。若显示网格线,可以设置线条的图案(颜色、线宽、线条样式等等)。6、数据标签VBA名称:DataLabels和DataLabel(1)图表中所有系列的所有点显示特定类型的数据标签或不显示数据标签:ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowNone(2)特定系列显示数值(Y)作为数据标签:With ActiveChar
3、t.SeriesCollection(“Xdata”) .HasDataLabels=True .ApplyDataLabels Type:=xlDataLabelsShowValueEnd With(3)特定的点在它的数据标签中显示文字With ActiveChart.SeriesCollection(“Xdata”).Points(1) .HasDataLabels=True .DataLabel.Text=”MyLabel”End With(4)将公式放置在某个系列上的某特定点的数据标签中(在公式中需使用RC样式)With ActiveChart.SeriesCollection(“Xd
4、ata”).point(1) .HasDataLabels=True .DataLabel.Text=”Sheet1.R1C1”End With7、图表标题、图例和数据表VBA名称:ChartTitle、HasLegend和HasDataTable可以用VBA指定图表标题和图例的位置、文字和文字格式。8、趋势线和误差线VBA名称:Trendlines和ErrorBar二、图表类型Excel标准图表类型图表类型描述Excel VBA常量柱形图簇状柱形图3D簇状柱形图堆积柱形图3D堆积柱形图百分比堆积柱形图3D百分比堆积柱形图3D柱形图xlColumnClusteredxl3DColumnClus
5、teredxlColumnStackedxl3DColumnStackedxlColumnStacked100xl3DColumnStacked100xl3DColumn条形图簇状条形图3D簇状条形图堆积条形图3D堆积条形图百分比堆积条形图3D百分比堆积条形图xlBarClusteredxl3DBarClusteredxlBarStackedxl3DBarStackedxlBarStacked100xl3DBarStacked100折线图xlLinexlLineMarkersxlLineStackedxlLineMarkersStackedxlLineStacked100xlLineMarke
6、rsstacked100xl3DLine饼图xlPiexlPieExplodedxl3DPiexl3DPieExplodedxlPieOfPiexlBarOfPieXY(散点)图xlXYScatterxlXYScatterSmoothxlXYScatterSmoothNoMarkersxlXYScatterLinesxlXYScatterLinesNoMarkers气泡图xlBubblexlBubble3DEffect面积图xlAreaxl3DAreaxlAreaStackedxl3DAreaStackedxlAreaStacked100xl3DAreaStacked100圆环图xlDough
7、nutxlDoughnutExploded雷达图xlRadarxlRadarMarkersxlRadarFilled曲面图xlSurfacexlSurfaceTopViewxlSurfaceWireframexlSurfaceWireframeTopView股价图xlStockHLCxlStockVHLCxlStockOHLCxlStockVOHLC圆柱图xlCylinderColClusteredxlCylinderBarColClusteredxlCylinderColStackedxlCylinderBarStackedxlCylinderColStacked100xlCylinderB
8、arStacked100xlCylinderCol圆锥图xlConeColClusteredxlConeBarClusteredxlConeColStackedxlConeBarStackedxlConeColStacked100xlConeBarStacked100xlConeCol棱锥图xlPyramidColClusteredxlPyramidBarClusteredxlPyramidColStackedxlPyramidBarStackedxlPyramidColStacked100xlPyramidBarStacked100xlPyramidColvba图表常用命令ActiveShe
9、et.UsedRange.Rows.Count 获取工作表的行数(注:考虑向前兼容性)Cells.Item(5,"C") 引单元格 C5Cells.Item(5,3) 引单元格 C5Application.WorksheetFunction.IsNumber("A1") 使用工作表函数检查 A1单元格中的数据是否为数字Range("A:A").Find(Application.WorksheetFunction.Max(Range("A:A").Activate 激活单元格区域 A 列中最大值的单元格Cells(8
10、,8).FormulaArray="=SUM(R2C-1:R-1C-1*R2C:R-1C)" 在单元格中输入数组公式。注意必须使用 R1C1 样式的表达式ActiveSheet.ChartObjects.Count 获取当前工作表中图表的个数ActiveSheet.ChartObjects("Chart1").Select 选中当前工作表中图表 Chart1ActiveSheet.ChartObjects("Chart1").Activate 选中当前图表区域ActiveChart.ChartArea.Select 选中当前图表区域W
11、orkSheets("Sheet1").ChartObjects("Chart2").Chart.ChartArea.Interior.ColorIndex=2 更改工作表中图表的图表区的背景颜色Sheets("Chart2").ChartArea.Interior.ColorIndex=2 更改图表工作表中图表区的颜色Charts.Add 添加新的图表工作表ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:D5"),Plo
12、tBy:=xlColumns 指定图表数据源并按列排列ActiveChart.Location Where:=xlLocationAsNewSheet 新图表作为新图表工作表ActiveChart.PlotArea.Interior.ColorIndex=xlNone 将绘图区颜色变为白色WorkSheets("Sheet1").ChartObjects(1).Chart.Export FileName:="C:MyChart.gif",FilterName:="GIF" 将图表 1 导出到 C 盘上并命名为MyChart.gif A
13、ctiveSheet.ChartObjects.Delete 删除工作表上所有的 ChartObject对象ActiveWorkbook.Charts.Delete 删除当前工作簿中所有的图表工作表·Excel中的VBA常量和编码值所代表的标准图表类型图表类型描述Excel VBA常量 编码值(注:下面按此顺序排列)柱形图簇状柱形图 xlColumnClustered 51 3D簇状柱形图xl3DColumnClustered54 堆积柱形图xlColumnStacked 52
14、160; 3D堆积柱形图xl3DColumnStacked 55 百分比堆积柱形图 xlColumnStacked10053 3D百分比堆积柱形图 xl3DColumnStacked100 56 3D柱形图xl3DColumn -4100条形图 簇状条形图xlBarClustered 57 3D簇状条形图 xl3DBarClu
15、stered 60 堆积条形图 xlBarStacked 58 3D堆积条形图 xl3DBarStacked 61 百分比堆积条形图 xlBarStacked100 59 3D百分比堆积条形图 xl3DBarStacked100 62折线图 折线图 xlLine 4 数据点
16、折线图 xlLineMarkers 65 堆积折线图 xlLineStacked 63 堆积数据点折线图 xlLineMarkersStacked 66 百分比堆积折线图 xlLineStacked100 64 百分比堆积数据点折线图 xlLineMarkersstacked100 67 3D折线图 xl3DLine
17、;-4101饼图 饼图 xlPie 5 分离型饼图 xlPieExploded 69 3D饼图 xl3DPie -4102 分离型3D饼图 xl3DPieExploded 70 复合饼图 xlPieOfPie 68 复合条饼图 xlBarOfPie 71XY(散点)图 散点
18、图 xlXYScatter -4169 平滑线散点图 xlXYScatterSmooth 72 无数据点平滑线散点图 xlXYScatterSmoothNoMarkers 73 折线散点图 xlXYScatterLines 74 无数据点折线散点图 xlXYScatterLinesNoMarkers 75气泡图 气泡图 xlBubble 15
19、; 3D气泡图 xlBubble3DEffect 87面积图 面积图 xlArea 1 3D面积图 xl3DArea -4098 堆积面积图 xlAreaStacked 76 3D堆积面积图 xl3DAreaStacked 78 百分比堆积面积图 xlAreaStacked100
20、; 77 3D百分比堆积面积图 xl3DAreaStacked100 79圆环图 圆环图 xlDoughnut -4120 分离型圆环图 xlDoughnutExploded 80雷达图 雷达图 xlRadar -4151 数据点雷达图 xlRadarMarkers
21、 81 填充雷达图 xlRadarFilled 82曲面图 3D曲面图 xlSurface 83 曲面图(俯视) xlSurfaceTopView 85 3D曲面图(框架图) xlSurfaceWireframe 84 曲面图(俯视框架图) xlSurfaceWirefr
22、ameTopView 86股价图 盘高-盘低-收盘图 xlStockHLC 88 成交量-盘高-盘低-收盘图 xlStockVHLC 90 开盘-盘高-盘低-收盘图 xlStockOHLC 89 成交量-开盘-盘高-盘低-收盘图 xlStockVOHLC 91圆柱图 柱形圆柱图 xlCylinderColClustered 92 条形圆柱图
23、xlCylinderBarClustered 95 堆积柱形圆柱图 xlCylinderColStacked 93 堆积条形圆柱图 xlCylinderBarStacked 96 百分比堆积柱形圆柱图 xlCylinderColStacked100 94 百分比堆积条形圆柱图 xlCylinderBarStacked100 97 3D柱形
24、圆柱图 xlCylinderCol 98圆锥图 柱形圆锥图 xlConeColClustered 99 条形圆锥图 xlConeBarClustered 102 堆积柱形圆锥图 xlConeColStacked 100 堆积条形圆锥图 xlConeBarStacked 103 百分比堆积柱形圆锥图 xlConeColStacked100 101
25、60; 百分比堆积条形圆锥图 xlConeBarStacked100 104 3D柱形圆锥图 xlConeCol 105棱锥图 柱形棱锥图 xlPyramidColClustered 106 条形棱锥图 xlPyramidBarClustered 109 堆积柱形棱锥图 xlPyramidColStacked 107
26、60; 堆积条形棱锥图 xlPyramidBarStacked 110 百分比堆积柱形棱锥图 xlPyramidColStacked100 108 百分比堆积条形棱锥图 xlPyramidBarStacked100 111 3D柱形棱锥图 xlPyramidCol 112·利用
27、以上参数,可用VBA写出批量产生Excel图表的程序。代码如下:Private Sub cmdCompareSales_Click()Dim iRows, iChartType, iChartTypeRows As IntegerDim iTemp As IntegerDim sChartTitle, sCategoryTitle, sValueTitle As StringDim sChartName As StringDim lArrayChartType(73) As Long, sArrayChartConst(73) As String, sArrayChartExplain(73)
28、 As StringFor iTemp = 0 To 72 lArrayChartType(iTemp) = Sheets("Sheet2").Cells(iTemp + 1, 1).Value sArrayChartConst(iTemp) = Sheets("Sheet2").Cells(iTemp + 1, 3).Value sArrayChartExplain(iTemp) = Sheets("Sheet2").Cells(iTemp + 1, 2)
29、.ValueNext iTempSheets("Sheet1").ActivatesChartTitle = "销售量比较图"sCategoryTitle = "Category标题"sValueTitle = "Value标题"iRows = Sheets("sheet1").UsedRange.Rows.CountOn Error Resume NextSheets("sheet1").ChartObjects.DeleteFor iChartType = 0 To 72
30、 Step 1 Charts.Add ActiveChart.ChartType = lArrayChartType(iChartType) ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A2:M" & CStr(iRows), PlotBy:=xlRows ActiveChart.Location where:=xlLocationAutomatic, Name:=&quo
31、t;Sheet1" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = sChartTitle & sArrayChartConst(iChartType) & sArrayChartExplain(iChartType)' .ChartTi
32、tle.Characters.Text = sChartTitle & "xl3DArea" .Axes(xlCategory, xlPrimary).HasTitle = False ' .Axes(xlCategory, xlPrimary).AxisTitle.Text = sCategoryTitle .Axes(xlValue, xlPrimary).
33、HasTitle = False ' .Axes(xlValue, xlPrimary).AxisTitle.Text = sValueTitle End With sChartName = Mid(ActiveChart.Name, 8, 6) ActiveSheet.Shapes(sChartName).Left = Range("B" & Str(18 * (iChartType + 1).Left
34、 ActiveSheet.Shapes(sChartName).Top = Range("B" & Str(18 * (iChartType + 1).Top ActiveChart.Export ThisWorkbook.Path & "" & Format(Now(), "yymmddhhmm") & sArrayChartConst(iChartType) & ".gif", "gif" Sheet
35、s("sheet1").ChartObjects(sChartName).Delete Next iChartTypeEnd Sub注意楼上的参数存于Sheet2的1至3列中。VBA-批量调整excel图表格式-线条粗细Excel 画图时默认的线条和标记比较大,写论文时使用起来经常要把线条和标记调小才好看。如果图表比较多,图里的系列也比较多的话,一条一条的设置起来会很麻烦,这里给出了一个宏,使用方法是选中图表后运行宏即可。Sub zoom()'' zoom 宏'' ActiveSheet.ChartObjects(&
36、quot;图表 1").Activate '1可以改为循环整数Dim i As IntegerFor i = 1 To ActiveChart.SeriesCollection.Count ActiveChart.SeriesCollection(i).Select Selection.MarkerSize = 3 '设置标记大小为3 With Selection.Format.Line .Visible = msoTrue .Weight = 1.25 '设置线条粗细为1.25 End WithNextEnd Sub可以根据自己的需求更改标记的大小和线条的粗
37、细。当然如果需要对所有图表做这种更改,可以找出图表个数,对ActiveSheet.ChartObjects("图表 i").Activate 进行外围循环即可。Shape(图形)、Chart(图表)对象在工作表中添加图形如果需要在工作表中添加图形对象,可以使用AddShape方法,如下面的代码所示。#001 Sub AddShape()#002 Dim myShape As Shape#003 On Error Resume Next#004 Sheet1.Shapes("myShape").Delete#005 Set myShape = Sheet1
38、.Shapes.AddShape(msoShapeRectangle, 40, 120, 280, 30)#006 With myShape#007 .Name = "myShape"#008 With .TextFrame.Characters#009 .Text = "单击将选择Sheet2!"#010 With .Font#011 .Name = "华文行楷"#012 .FontStyle = "常规"#013 .Size = 22#014 .ColorIndex = 7#015 End With#016 E
39、nd With#017 With .TextFrame #018 .HorizontalAlignment = -4108#019 .VerticalAlignment = -4108#020 End With#021 .Placement = 3#022 End With#023 myShape.Select#024 With Selection.ShapeRange#025 With .Line#026 .Weight = 1#027 .DashStyle = msoLineSolid#028 .Style = msoLineSingle#029 .Transparency = 0#030
40、 .Visible = msoTrue#031 .ForeColor.SchemeColor = 40#032 .BackColor.RGB = RGB(255, 255, 255)#033 End With#034 With .Fill#035 .Transparency = 0#036 .Visible = msoTrue#037 .ForeColor.SchemeColor = 41#038 .OneColorGradient 1, 4, 0.23#039 End With#040 End With#041 Sheet1.Range("A1").Select#042
41、Sheet1.Hyperlinks.Add Anchor:=myShape, Address:="", _#043 SubAddress:="Sheet2!A1", ScreenTip:="选择Sheet2!"#044 Set myShape = Nothing#045 End Sub代码解析:AddShape过程在工作表中添加一个矩形并设置其外观等属性。第2行代码声明变量myShape的对象类型。第3、4行代码删除可能存在的名称为“myShape”的图形对象。第5行代码使用AddShape方法在工作表中添加一个矩形。当该方法应用于S
42、hapes对象时,返回一个Shape对象,该对象代表工作表中的新自选图形,语法如下:expression.AddShape(Type, Left, Top, Width, Height)参数expression是必需的,返回一个Shapes对象。参数Type是必需的,指定要创建的自选图形的类型。参数Left和Top是必需的,以磅为单位给出自选图形边框左上角的位置。参数Width和Height是必需的,以磅为单位给出自选图形边框的宽度和高度。第7行代码将新建图形命名为“myShape”,向Shapes集合添加新的图形时,将对新添加的图形赋以默认的名称,若要为图形指定更有意义的名称,可指定其Nam
43、e属性。第8行到第16行代码为矩形添加文字,并设定其格式。其中第8行代码使用TextFrame 属性和Characters方法返回该矩形的字符区域。应用于Shape对象的TextFrame 属性返回一个TextFrame对象,该对象包含指定图形对象的对齐和定位属性;Characters方法返回一个Characters对象,该对象代表某个图形的文本框中的字符区域,语法如下:expression.Characters(Start, Length)参数expression是必需的,返回一个指定文本框内Characters对象的表达式。参数Start是可选的,表示将要返回的第一个字符,如果此参数设置为
44、 1 或被忽略,则Characters方法会返回以第一个字符为起始字符的字符区域。参数Length是可选的,表示要返回的字符个数。如果此参数被忽略,则Characters方法会返回该字符串的剩余部分(由Start参数指定的字符以后的所有字符)。第9行代码为矩形添加文字,应用于Characters对象的Text属性返回或设置对象的文本,为可读写的String类型。第10行到第15行代码设置矩形中文字的属性,应用于Characters对象Font属性返回一个Font对象,该对象代表指定对象的字体属性(字体名称、字体大小、字体颜色等),第11行代码设置字体名称,第12行代码设置字体样式,第13行代码
45、设置字体大小,第14行代码颜色。第17行到第20行代码设定矩形中文字的对齐方式。应用于TextFrame对象的HorizontalAlignment属性返回或设置指定对象的水平对齐方式,可为表格 错误!文档中没有指定样式的文字。1所示的XlHAlign常量之一。常量值描述xlHAlignCenter-4108居中xlHAlignCenterAcrossSelection7靠左xlHAlignDistributed-4117分散对齐xlHAlignFill5分散对齐xlHAlignGeneral1靠左xlHAlignJustify-4130两端对齐xlHAlignLeft-4131靠左xlHAl
46、ignRight-4152靠右表格 Error! No text of specified style in document.1HorizontalAlignment属性的XlHAlign常量应用于TextFrame对象的VerticalAlignment属性返回或设置指定对象的垂直对齐方式,可为表格 错误!文档中没有指定样式的文字。2所示的XlHAlign常量之一。常量值描述xlVAlignCenter-4108居中xlVAlignJustify-4130两端对齐xlVAlignBottom-4107靠下xlVAlignDistributed-4117分散对齐xlVAlignTop-416
47、0靠上表格 Error! No text of specified style in document.2VerticalAlignment属性的XlHAlign常量第21行代码设置矩形大小和位置不随单元格而变,应用于Shape对象的Placement属性返回或设置对象与所在的单元格之间的附属关系,可为表格 错误!文档中没有指定样式的文字。3所示的XlPlacement常量之一。常量值描述xlFreeFloating3大小、位置均固定xlMove2大小固定、位置随单元格而变xlMoveAndSize1大小、位置随单元格而变表格 Error! No text of specified style
48、 in document.3XlPlacement常量第24行到第32行代码设置矩形的边框线条格式,应用于ShapeRange集合的Line属性返回一个LineFormat 对象,该对象包含指定图形的线条格式属性。其中第26行代码设置矩形线条粗细,第27行代码设置矩形线条的虚线样式,第28行代码设置矩形填充的透明度,第29行代码设置矩形为可见,第30行代码设置矩形的前景色,第31行代码设置矩形填充背景的颜色。第33行到第38行代码设置矩形的内部填充格式,应用于ShapeRange集合的Fill属性返回FillFormat对象,该对象包含指定的图表或图形的填充格式属性。其中第35行代码设置矩形内
49、部的透明度,第36行代码设置矩形内部为可见,第37行代码设置矩形内部的前景色,第38行代码将矩形内部指定填充设为单色渐变,应用于 FillFormat对象的OneColorGradient方法将指定填充设为单色渐变,语法如下:expression.OneColorGradient(Style, Variant, Degree)其中参数Style是必需的,底纹样式,可为表格 错误!文档中没有指定样式的文字。5所示的MsoGradientStyle常量之一。常量值描述msoGradientDiagonalDown4斜下msoGradientDiagonalUp3斜上msoGradientFromC
50、enter7无msoGradientFromCorner5角部幅射msoGradientFromTitle6中心幅射msoGradientHorizontal1水平msoGradientMixed-2无msoGradientVertical2垂直表格 Error! No text of specified style in document.4MsoGradientStyle常量参数Variant是必需的,渐变变量。取值范围为 1 到 4 之间,分别与“填充效果”对话框中“渐变”选项卡的四个渐变变量相对应。如果GradientStyle 设为 msoGradientFromCenter,则Variant参数只能设为 1 或 2。参数Degree是必需的,灰度。取值范围为 0.0(表示最深)到 1.0(表示最浅)之间。第42、43行代码为矩形对象添加超链接,应用于Hyperlinks对象的Add方法向指定的区域或图形添加超链接,语法如下:expression.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay)参数expression是必需的,返回一个Hyperlinks对象。参数Anchor是必需的,超链接的位置。可为Ra
限制150内