Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 动态范围图表_Excel_Vba_Dynamic_Excel Charts - Fatal编程技术网

Excel 动态范围图表

Excel 动态范围图表,excel,vba,dynamic,excel-charts,Excel,Vba,Dynamic,Excel Charts,我正在用VBA从动态图表制作一个图表。 图表如预期所示,但是我希望X轴仅显示包含数据的列中的X值。这里显示了所有列,包括那些没有任何数据的列 下面是我的代码: Dim rng As Range Dim cht As Object Dim LstRw2 As Long Dim N As Long N = Cells(1, 1).End(xlDown).Row Set rng = Range("E2:O" & N) Set cht = ActiveSheet.Shapes.

我正在用VBA从动态图表制作一个图表。 图表如预期所示,但是我希望X轴仅显示包含数据的列中的X值。这里显示了所有列,包括那些没有任何数据的列

下面是我的代码:

Dim rng As Range
Dim cht As Object
Dim LstRw2 As Long
Dim N As Long
    N = Cells(1, 1).End(xlDown).Row
   Set rng = Range("E2:O" & N)
  Set cht = ActiveSheet.Shapes.AddChart
  cht.chart.SetSourceData Source:=rng
  cht.chart.ChartType = xlColumnClustered
    ActiveSheet.ChartObjects("Chart 1").chart.SeriesCollection(1).XValues = _
"='Sheet1'!$F$11:$O$11"
End Sub 
到目前为止,它从另一个工作表中获取xvalues,但是我想使用当前工作表获取这些值

在添加的图片中,x轴不应显示202120222023,因为它们没有任何数据。

请尝试此代码:

Sub MakeChart()
 Dim rng As Range, cht As ChartObject, LstRow As Long, i As Long
 Dim sh As Worksheet, lastCol As Long, lastC As Long, ColAddr As String
  Set sh = ActiveSheet      'use here your sheet
   LstRow = sh.Cells(Cells.Rows.count, 1).End(xlUp).row 'last row in A:A
   'Last column on the third row
   For i = 2 To LstRow
        lastC = sh.Cells(i, Cells.Columns.count).End(xlToLeft).column
        If lastC > lastCol Then lastCol = lastC
   Next i
   ColAddr = sh.Cells(1, lastCol).Address 'last column address (on first row)

   Set rng = sh.Range(sh.Range("E2"), sh.Cells(LstRow, lastCol))
   Set cht = ActiveSheet.ChartObjects.Add(left:=100, top:=80, width:=350, _
                                                                height:=250)

   cht.Chart.SetSourceData source:=rng
   cht.Chart.ChartType = xlColumnClustered
    sh.ChartObjects(sh.ChartObjects.count).Chart.SeriesCollection(1).XValues = _
                                            "='" & sh.Name & "'!$F$1:" & ColAddr
End Sub

我更新了代码以使用范围中较长的行,以便设置要从
Chart.SeriesCollection(1).XValues

Hi FaneDuru感谢您的帮助宏可以完美地用于多行,但当只有一行时它无法工作。你能帮我排一排吗?请向我们展示您的数据范围在这种情况下的外观。。当我回家的时候,我会解决它。。。尝试将“lastCol=sh.Cells(3,Cells…”更改为“lastCol=sh.Cells”(lastR,ow,Cells’…通过单行我的意思是说,如果你看到上面的图片,有两行数据,你的宏给出了一个完美的图形。当有一行时,我想要相同的图形,但在那个时候它失败了。你能帮我一下吗。附加一行图像的链接,所以基本上对于一行,graph将是一个系列。但是它没有给出你将在附加链接中看到的图形。非常感谢。它起作用了。我刚刚对你的代码做了一些更改。lastCol=sh.Cells(2,Cells.Columns.count)。End(xlToLeft)。column你是个天才。再次感谢