2012-07-10 46 views
0

我有一個Excel表格,我想要從名爲「圖形」的新選項卡中提取數據並將數據表示爲圖形。在for循環中創建和定位圖VBA

我能夠很容易地生成圖形,但是當它們被創建時,它們都被堆疊在一起,因爲我無法找到一個體面和簡單的方法來給它們設置位置,以便在每次循環完成後增加。

我一直在嘗試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可以增加。

在此先感謝

編輯:忘了提,我不能,因爲我需要的頁面被多次使用了宏做到這一點,使用宏意味着該圖形名稱使用以識別它們,因此隨着圖表名稱越來越高,在第一代圖形之後跟蹤圖形變得不可能。

回答

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將定義新創建的圖表的位置。

HTH

+0

謝謝你的回答!幫助我弄明白了。 – bealor 2012-07-12 14:02:09