使用macros在excel中生成散点图

我已经写了一个macros在Excel中生成graphics,但我想要在下一张表中生成的graphics不在同一张sheet.i已经粘贴我的macros下面的工作正常我只是希望它在下一张表。 请给我提供一些解决scheme*

Sub LumData1() If IsEmpty(Range("B2,D2")) = False Then Range("B:B,D:D,H:H,I:I,J:J,M:M").Select Range("M1").Activate ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets(ActiveSheet.Name).Range( _ "$B:$B,$D:$D,$H:$H,$I:$I,$J:$J,$M:$M" _ ) ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name With ActiveChart.ChartArea .Width = 1060 .Height = 420 .Left = 0 End With ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).AxisGroup = 2 ActiveChart.SeriesCollection(5).Select ActiveChart.SeriesCollection(5).AxisGroup = 2 ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = True ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Value" ActiveChart.Axes(xlCategory).TickLabels.Orientation = 45 End If End Sub 

我的回答不仅包括如何解决你的问题,而且还包括如何以“更清洁”和更安全的方式在VBA中自动定义和设置图表。

最好避免使用ActiveSheetSelectActiveChart 。 而是总是使用引用的对象,在这种情况下, WorksheetsChartObject 。 例如Dim ChtObj As ChartObject ,稍后使用Set ChtObj = ShtCht.ChartObjects.Add(100, 100, 500, 500) ,其中ShtCht是创build图表的工作表。

一旦定义并设置了ChartObject ,通过使用With ChtObj以及嵌套的属性,通过在第一个With语句下添加With .Chart.ChartArea ,可以轻松修改其属性。

 Option Explicit Sub LumData1() Dim ChtObj As ChartObject Dim ShtSrc As Worksheet Dim ShtCht As Worksheet ' change "Sheet1" to your sheet's name (where you have your chart's data) Set ShtSrc = Worksheets("Sheet1") ' <-- I preffer not to work with ActiveSheet 'Set ShtCht = Worksheets("Sheet2") ' <-- set the chart's destination worksheet Set ShtCht = Worksheets.Add ' <-- create a new worksheet to place the chart ShtCht.Name = "Chart" If Not IsEmpty(ShtSrc.Range("B2,D2")) Then Set ChtObj = ShtCht.ChartObjects.Add(100, 100, 500, 500) With ChtObj .Chart.ChartType = xlXYScatterSmoothNoMarkers .Chart.SetSourceData ShtSrc.Range("$B:$B,$D:$D,$H:$H,$I:$I,$J:$J,$M:$M") ' set position of the chart to Cell M1 .Top = ShtCht.Range("M1").Top .Left = ShtCht.Range("M1").Left ' modify chart position and dimensions With .Chart.ChartArea .Width = 1060 .Height = 420 .Left = 0 End With With .Chart .SeriesCollection(1).AxisGroup = 2 .SeriesCollection(5).AxisGroup = 2 .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Value" .Axes(xlCategory).TickLabels.Orientation = 45 End With End With End If End Sub 

经过OP的澄清后编辑 ,他必须制作一张新的表格来放置图表

尽可能坚持你的代码:

  • 删除ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name

  • 将下面的代码放在End if之前

     Dim myChart As Chart: Set myChart = ActiveChart Worksheets.Add myChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name