在for循环VBA中创建和定位图形

在for循环VBA中创建和定位图形,vba,excel,Vba,Excel,我有一个excel工作表,我想从中提取数据,并在一个名为“graphs”的新选项卡上以图形的形式表示数据 我能够很容易地生成图形,但是当它们被创建时,它们都是相互叠加的,因为我无法找到一个合适的简单方法来给它们设置位置,我可以在每次循环完成后增加这些位置 我一直在尝试activechart.location命令,但似乎找不到正确的命令 这是我目前的代码。这将生成图表并将其输出到当前excel工作表 Dim i As Integer i = 30 Start = Start + 2 (global

我有一个excel工作表,我想从中提取数据,并在一个名为“graphs”的新选项卡上以图形的形式表示数据

我能够很容易地生成图形,但是当它们被创建时,它们都是相互叠加的,因为我无法找到一个合适的简单方法来给它们设置位置,我可以在每次循环完成后增加这些位置

我一直在尝试
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完全陌生,即使是这一小块代码也需要付出很多努力! 我的问题是,我可以在这里放些什么,在创建图表定位时为每个图表提供一个位置。最好是一个新的变量,我可以增加

提前谢谢

编辑:忘了提一下,我无法使用宏执行此操作,因为我需要多次使用页面,使用宏意味着使用图形名称来识别它们,因此在第一代图形之后,随着图形名称不断升高,跟踪图形变得不可能

试试这个

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
我已经创建了两个变量
nTop
nLeft
,它们将定义新创建的图形的位置


HTH

谢谢你的回答!帮我弄明白了。