059 固定工作表中图形的位置 工作表中插入的图片,一般都是固定的尺寸和固定的单元格区域中的,但在实际使用中可能因一些人为的因素导致图片位置偏移或尺寸变化,此时可以使用VBA代码进行调整,如下面的代码所示。 Sub ShapeAddress() Dimrng As Range Setrng = Sheet1.Range('B4:E22') WithSheet1.Shapes('Picture 1') .Rotation = 0 .Select With Selection .Top = rng(1).Top + 1 .Left = rng(1).Left + 1 .Width = rng.Width - 0.5 .Height = rng.Height - 0.5 End With EndWith Range('A1').Select End Sub 代码解析: ShapeAddress过程调整指定图形在工作表中的位置。 第3行代码变量rng保存工作表中插入图片的单元格区域。。 第5行代码设置图片的转角,应用于Shape对象Rotation属性以度为单位返回或设置图形的转角,设置为正值向右偏转,设置为负值向左偏转,设置为零图片则保持90度垂直。 第7行到第12行代码设置图片的Top属性和Left属性将图片移动变量rng所保存的单元格区域中,并设置其Width属性和Height属性使其适应所在单元格区域的大小。 第14行代码选择A1单元格,不然图片处于选中状态。 经过以上设置,工作表中的图片“Picture 1”不管处于什么状态都可以一键恢复其原来的大小、位置。
▲060 使用VBA自动生成图表 在实际工作中我们常用图表来表现数据间的某种相对关系,一般采用手工插入的方式,而使用VBA代码可以在工作表中自动生成图表,如下面的示例代码。 Sub ChartAdd() DimmyRange As Range DimmyChart As ChartObject DimR As Integer WithSheet1 .ChartObjects.Delete R = .Range('A65536').End(xlUp).Row Set myRange = .Range('A' &1 & ':B' & R) Set myChart = .ChartObjects.Add(120,40,400,250) With myChart.Chart .ChartType = xlColumnClustered .SetSourceData Source:=myRange,PlotBy:=xlColumns .ApplyDataLabels ShowValue:=True .HasTitle = True .ChartTitle.Text = '图表制作示例' With .ChartTitle.Font .Size = 20 .ColorIndex = 3 .Name = '华文新魏' End With With .ChartArea.Interior .ColorIndex = 8 .PatternColorIndex = 1 .Pattern = xlSolid End With With .PlotArea.Interior .ColorIndex = 35 .PatternColorIndex = 1 .Pattern = xlSolid End With .SeriesCollection(1).DataLabels.Delete With .SeriesCollection(2).DataLabels.Font .Size = 10 .ColorIndex = 5 End With End With EndWith SetmyRange = Nothing SetmyChart = Nothing 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 常量之一。 参数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过程,在工作表中创建簇状柱形图,
▲061 使用独立窗口显示图表 如果需要将工作表中嵌入的图表显示在独立的窗口中,可以使用下面的代码。 Sub ChartShow() WithSheet1.ChartObjects(1) .Activate .Chart.ShowWindow = True EndWith WithActiveWindow .Top = 50 .Left = 50 .Width = 400 .Height = 280 .Caption = ThisWorkbook.Name EndWith End Sub 代码解析: ChartShow过程,将工作表中嵌入的图表显示在独立的窗口中。 第2行到第5行代码将工作表中指定图表的ShowWindow属性设置为True,使用独立的窗口显示该图表。 第7、8行代码指定活动窗口显示的位置。 第9、10行代码调整活动窗口的大小使之适应图表的大小。 第11行代码指定活动窗口标题栏中显示的标题。
|
|
来自: wdmexcel > 《Excel Vba》