我有一张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是全新的,即使是这一小段代码也需要付出很多努力! 我的问题是,我可以在这里放置什么,为每个图表创建一个位置,因为我创建它来定位它。优选地,新变量I可以递增。
提前致谢
编辑:忘记提及,我无法使用宏来执行此操作,因为我需要多次使用页面,使用宏意味着图形名称用于识别它们因此,随着图表名称继续越来越高,在第一代图形之后跟踪图形变得不可能。
答案 0 :(得分: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
我创建了两个变量nTop
和nLeft
,它们将定义新创建的图形的位置。
HTH