【问题标题】:How to place multiple Excel charts evenly in one chart sheet?如何将多个 Excel 图表均匀地放置在一张图表中?
【发布时间】:2020-01-31 00:07:38
【问题描述】:

如何将四个图表对象放置在具有四个数据集范围的单个 Excel 图表中?

我在图表表中创建所有四个图表。我正在努力调整第一个图表对象的大小,因为它看起来图表大小是固定的。
如果我在图表工作表中创建图表,它会是固定大小,适合整个屏幕吗?

另外,我尝试使用图表索引选择每个图表,但第一个图表对象没有索引,导致四个图表对象中仅获得三个索引。
该代码不起作用,因为第二个导入图表将是索引 1,它与 ForLoop 索引不匹配。

    For i = 1 To cnt_dataset - 1

        Range((Cells(data_array(i, 1), 21)), (Cells(data_array(i, 2), 22))).Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.ApplyLayout (10)
        ActiveChart.ChartGroups(1).HiLoLines.Select
        Selection.Delete

        If i = 1 Then
            ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Chart"

        Else
            ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart"
            ActiveSheet.ChartObjects(i).Activate

        End If

        With ActiveChart
            .ChartTitle.Text = "Chart A"
            .Axes(xlValue, xlPrimary).AxisTitle.Text = "y"
            .Axes(xlCategory, xlPrimary).AxisTitle.Text = "x"
            .Axes(xlCategory).Select
        End With

        Selection.TickLabels.NumberFormat = "#,##0"
        ActiveWindow.WindowState = xlMaximized          

    Next i

【问题讨论】:

  • 我刚刚在谷歌上搜索了“vba activechart size location”,这是第一个结果...peltiertech.com/Excel/ChartsHowTo/ResizeAndMoveAChart.html
  • 如果我将图表对象作为新工作表移动,则不会出现网站中似乎未提及的图表索引。请随时纠正我。谢谢。
  • 如果你阅读这篇文章并滚动浏览它,它会显示如何resizereposition 图表.. 还有如何CoverRangeWithAChart。失败了,您可以“始终录制宏以了解如何做某事”。
  • 如果命令 'ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Chart"' 被执行,图表移动到新的图表工作表,然后我什至不能再手动调整图表大小了.如果我重新解决它,这就是我的观点..

标签: excel vba


【解决方案1】:

使用这个简单的数据...

...这是创建空白图表表的简单代码,然后直接在此图表表上制作简单图表。

Sub PutChartsIntoChartSheet()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  Dim rng As Range
  Set rng = ActiveSheet.UsedRange

  Dim cht As Chart
  Set cht = ActiveWorkbook.Charts.Add
  cht.ChartArea.Clear

  Dim rX As Range
  Set rX = rng.Columns(1)

  Dim iCht As Long
  For iCht = 1 To rng.Columns.Count - 1
    Dim rY As Range
    Set rY = rX.Offset(, iCht)

    Dim cht2 As Chart
    Set cht2 = cht.Shapes.AddChart(xlLine).Chart
    cht2.SetSourceData Union(rX, rY)
  Next
End Sub

我没有尝试修饰图表或在图表表上很好地排列它们。

这应该可以正常运行。

【讨论】:

    【解决方案2】:

    当您创建图表工作表时,您看到的图表在图表工作表中,而不是在称为 ChartObject 的容器中。因此,您需要一张空白图表表,并且您需要将所有图表作为 ChartObjects 嵌入到此图表表中。

    替换这个位:

        If i = 1 Then
            ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Chart"
    
        Else
            ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart"
            ActiveSheet.ChartObjects(i).Activate
    
        End If
    

    有了这个

        ' create reference to new chart
        Dim cht As Chart
        Set cht = ActiveChart
    
        If i = 1 Then
            ' add chart sheet and make it blank            
            ActiveWorkbook.Charts.Add
            ActiveChart.Name = "Chart"
            ActiveChart.ChartArea.Clear
    
        End If
        cht.Location Where:=xlLocationAsObject, Name:="Chart"
        ActiveSheet.ChartObjects(i).Activate
    

    【讨论】:

    • 感谢您分享您的知识。但是,如果我运行您的代码,则“End If”旁边的行会出现运行时错误“1004”。我得到了你预期的结果,但不知道代码为什么没有完全运行。有什么想法吗?
    • “紧邻”是指“就在之前”还是“就在之后”?
    • 我的意思是“马上”。错误发生在
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多