0

我有一个 Excel 表,我想从中提取数据并将数据表示为一个名为“图表”的新选项卡上的图表。

我能够很容易地生成图表,但是当它们被创建时,它们都相互堆叠,因为我无法找到一种体面而简单的方法来给它们设置位置,我可以在每次循环完成后增加。

我一直在尝试activechart.location命令,但似乎找不到正确的命令。

这是我目前的代码。这会生成图表并将它们输出到当前的 Excel 工作表。

Dim i As Integer
i = 30
Start = Start + 2 (global variable)
finish = finish + 2 (global variable)
For i = 30 To 56
   Range("ci:bbi").Select
   ActiveSheet.Shapes.AddChart.Select
   ActiveChart.HasTitle = True
   ActiveChart.ChartTitle.Text = Cells(i, 2).Value
   ActiveChart.SourceData Source:=Range(Cells(i, Start), Cells(i, finish))
   ActiveChart.ChartType = xlColumnStacked
Next

我对 vba 完全陌生,即使是这个小代码块也需要付出很多努力!我的问题是,我可以在这里输入什么,以便在创建每个图表时为其定位。最好是一个我可以增加的新变量。

提前致谢

编辑:忘了提,我不能用宏来做到这一点,因为我需要多次使用页面,使用宏意味着图形名称用于识别它们,因此无法跟踪图形之后第一代图表随着图表名称的不断攀升。

4

1 回答 1

1

试试这个

Sub Sample()
    Dim i As Long, nTop As Long, nLeft As Long
    Dim strChrt As String

    i = 30: nLeft = 20: nTop = 20
    
    Start = Start + 2: finish = finish + 2
    
    For i = 30 To 56
       ActiveSheet.Shapes.AddChart.Select
       ActiveChart.HasTitle = True
       ActiveChart.ChartTitle.Text = Cells(i, 2).Value
       ActiveChart.SetSourceData Source:=Range(Cells(i, Start), Cells(i, finish))
       ActiveChart.ChartType = xlColumnStacked
       
       strChrt = Trim(Replace(ActiveChart.Name, ActiveSheet.Name, ""))

       ActiveSheet.Shapes(strChrt).Left = nLeft
       ActiveSheet.Shapes(strChrt).Top = nTop

       '~~> Increment the next `Top` placement for the chart
       nTop = nTop + ActiveSheet.Shapes(strChrt).Height + 20
    Next
End Sub

我创建了两个变量nTopnLeft它们将定义新创建的图形的位置。

于 2012-07-10T14:36:52.487 回答