使用VBA在Excel中创建多个图表

时间:2017-09-28 18:56:53

标签: vba excel-vba loops charts excel

我有一个包含300列的工作表,并希望为每列创建一个散点图,从同一工作表中的另外两个工作表中获取数据。 问题是我不熟悉VBA,有些错误代码根本没有用。

Private Sub Create_Charts()
   Dim sh As Worksheet
    Dim chrt As Chart

    For i = 1 To 300

        Set sh = ActiveWorkbook.Worksheets("Graphs")
        Set chrt = sh.Shapes.AddChart.Chart
        With chrt
            'Data
            .ChartType = xlXYScatter
            .SeriesCollection.NewSeries
            .SeriesCollection(1).Name = "=""Scatter Chart"""


            'With the following parameters it works:
            '.SeriesCollection(1).XValues = "=OP!$c$4:$c$1588"
            '.SeriesCollection(1).Values = "=PV!$c$4:$c$1588"

            'But I need something like this:                
            .SeriesCollection(1).XValues = CStr(Worksheets("PV").Range(Cells(i, 4), Cells(i, 1588)))
            .SeriesCollection(1).Values = CStr(Worksheets("OV").Range(Cells(i, 4), Cells(i, 1588)))

            'Location
            .ChartArea.Left = 380 * i - 380
            .ChartArea.Top = 100
            .ChartArea.Height = 360
            .ChartArea.Width = 360

            'Formatting
            .Axes(xlCategory).HasMajorGridlines = True
            .Axes(xlValue).HasMajorGridlines = True
            .HasAxis(xlCategory, xlPrimary) = False
            .HasAxis(xlValue, xlPrimary) = False

            .HasLegend = False


        End With

    Next i

End Sub

1 个答案:

答案 0 :(得分:0)

此行引用一列:

.SeriesCollection(1).XValues = "=OP!$c$4:$c$1588"

这引用了第4列到第1588行的第i行:

.SeriesCollection(1).XValues = CStr(Worksheets("PV").Range(Cells(i, 4), Cells(i, 1588)))

但是你还需要引用Range而不是Cells。如果你传入一个字符串地址,你需要领先" =&#34 ;;它更容易通过一个范围。所以试试这个:

Dim wsPV As Worksheet, wsOV As Worksheet
Dim rngX As Range, rngY As Range

Set wsPV = ActiveWorkbook.Worksheets("PV")
Set wsOV = ActiveWorkbook.Worksheets("OV")

Set rngX = wsPV.Range(wsPV.Cells(4, i), wsPV.Cells(1588, i)
Set rngY = wsOV.Range(wsOV.Cells(4, i), wsOV.Cells(1588, i)

chrt.SeriesCollection(1).XValues = rngX
chrt.SeriesCollection(1).Values = rngY