繁体   English   中英

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

[英]Creating and positioning graphs in a for loop VBA

我有一个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可以增加。

提前致谢

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

尝试这个

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 ,它们将定义新创建图形的位置。

高温超导

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM