使用宏在Excel中生成散点图xy图

时间:2017-01-04 07:29:18

标签: excel vba excel-vba

我已经编写了一个宏来生成excel中的图形但是我希望在下一个工作表中生成该图形而不是在同一个工作表中。我已将其宏粘贴在其工作正常之下我只是希望它在下一个工作表中。请给我一些解决方案*

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

2 个答案:

答案 0 :(得分:1)

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

最好避免使用select sum(content = 'test 1') as test_1, sum(content = 'test 2') as test_2, sum(content = 'test 3') as test_3 from table_name where custom_id in (10,9,8,6,5,4,3,2,1); ActiveSheetSelect。而是始终使用引用的对象,在本例中为ActiveChartWorksheets。 E.g ChartObject,稍后将其设置为Dim ChtObj As ChartObject,其中Set ChtObj = ShtCht.ChartObjects.Add(100, 100, 500, 500)是您创建图表的工作表。

一旦您定义并设置了ShtCht,就可以使用ChartObject以及嵌套属性轻松修改其属性,方法是在第一个{{1}下添加With ChtObj声明。

<强>代码

With .Chart.ChartArea

答案 1 :(得分:0)

在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