Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用vba创建具有特定列输入的动态图表?_Excel_Vba - Fatal编程技术网

Excel 如何使用vba创建具有特定列输入的动态图表?

Excel 如何使用vba创建具有特定列输入的动态图表?,excel,vba,Excel,Vba,我正在尝试使用以下代码使用VBA创建图表: lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row lc = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column Set chtRng = Range(Cells(1, 1), Cells(lr, lc)) ActiveSheet.Shapes.AddChart2(227, xlLine).Select ActiveChart.SetSou

我正在尝试使用以下代码使用VBA创建图表:

lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lc = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set chtRng = Range(Cells(1, 1), Cells(lr, lc))
ActiveSheet.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SetSourceData Source:=chtRng
ActiveChart.SetElement (msoElementLegendBottom)
Set targetSht = ThisWorkbook.Worksheets("Test_graph")
从数据库中提取数据,并在A到D列中刷新数据。 使用上述代码生成图形时,我得到以下结果: 但是,在获取的数据中,我想跳过C列中的数据,并期望得到类似这样的结果

欢迎提出任何建议或解决方案

问候


PS:我是这个平台的新手,所以请原谅我的格式设置。

我建议您使用ChartObject创建这样的图表。我假设你的数据看起来总是一样的,这样就可以了:

Option Explicit
Sub Test()

    Dim MyChart As ChartObject, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1") ' change this for the name of the sheet you want the chart
    Set MyChart = ws.ChartObjects.Add(Left:=ws.Range("A1").Left, _
            Width:=ws.Range("A1:F1").Width, _
            Top:=ws.Range("A1").Top, _
            Height:=ws.Range("A1:A16").Height)
    With MyChart.Chart
        .SetSourceData Source:=ws.Range("H1:K16")
        .SeriesCollection(2).Delete
        .FullSeriesCollection(1).ChartType = xlLine
        .FullSeriesCollection(2).ChartType = xlLine
    End With

End Sub
正如你所看到的,我使用引用插入了我想要的图表,从位置的单元格范围,宽度和高度的单元格范围,向左和向上

如果您只想了解第二列,它将是SeriesCollection2

输出如下所示:


编辑:输出看起来像条线,因为我后来添加了代码,使其像线。

使用Union连接两个范围

Sub Program1()

Dim wb As Workbook
Dim ws As Worksheet
Dim Lastrow As Long
Dim Str1 As String
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
Lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Set chtRng1 = ws.Range(ws.Cells(1, 1), ws.Cells(Lastrow, 1))
Set chtRng2 = ws.Range(ws.Cells(1, 2), ws.Cells(Lastrow, 2))
Set chtRng3 = ws.Range(ws.Cells(1, 3), ws.Cells(Lastrow, 3))
Set chtrng = Union(chtRng1, chtRng3)
End Sub
也许像这样

Option Explicit

Sub TestChart()

    Dim targetSht As Worksheet
    Dim LastRow As Long

    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

    ActiveSheet.Shapes.AddChart2(227, xlLine).Select

    With ActiveChart
        .SeriesCollection.Add Source:=ActiveSheet.Range(Cells(2, 2), Cells(LastRow, 2))
        With .SeriesCollection(1)
            .Name = ActiveSheet.Cells(1, 2)
            .XValues = ActiveSheet.Range(Cells(2, 1), Cells(LastRow, 1))
        End With
        .SeriesCollection.Add Source:=ActiveSheet.Range(Cells(2, 4), Cells(LastRow, 4))
        With .SeriesCollection(2)
            .Name = ActiveSheet.Cells(1, 4)
            .XValues = ActiveSheet.Range(Cells(2, 1), Cells(LastRow, 1))
        End With
        .HasTitle = True
        .ChartTitle.Text = "Some title"
        .SetElement (msoElementLegendBottom)
    End With
    Set targetSht = ThisWorkbook.Worksheets("Test_graph")

End Sub

所以你的图表上的日期在哪里?当图表从4列中得到3列时,你从3列中得到2列。@Damian我刚刚分享了这个概念,如何连接两个范围,他可以在代码中使用ChtRng绘制图表。但问题是,在你的解决方案中,范围是静态的,我需要范围是动态的。你能提供同样的解决方案吗?你只需要更改我的源代码范围就可以了。。。实际上,AddChart2 Excel 2013+和AddChart 2007-2010与ChartObjects.Add中的非可选参数具有相同的可选左参数、顶参数、宽度参数和高度参数。AddChart2的好处是它们是可选的;此外,AddChart2允许您指定图表类型,AddChart2允许您指定图表样式。我已经将我的大部分生产代码切换到AddChart而不是AddChart2,因为我仍然支持Excel 2010。使用AddChart可以让您预先指定折线图类型,而无需在以后进行更改,您也可以将折线图作为一个整体而不是每个系列进行更改。此外,我会将.SetSourceData:=ws.RangeH1:K16更改为.SetSourceData:=ws.RangeH1:H16,J1:K16,这样我就不必删除一个系列并在图表系列颜色序列中丢失其颜色。