2013-11-13 2 views
0

Пожалуйста, смотрите код ниже:VBA Excel Динамических диаграмм с помощью цикла For даже нечетных столбцов

Sub CreatePieCharts() 

'Declare the variables 

    Dim wks As Worksheet 
    Dim AddtionalCharts As Chart 
    Dim MySeries As Series 
    Dim Rng As Range 
    Dim CatRange As Range 
    Dim SourceRange As Range 
    Dim SourceData As Range 
    Dim LeftPos As Double 
    Dim TopPos As Double 
    Dim Gap As Integer 
    Dim i As Long 
    Dim j As Long 
    Dim k As Long 

    'Set the range for the source data from the active worksheet 
    Set Rng = Range("A1").CurrentRegion 

    'Set the position of the first chart 
    LeftPos = Range("M3").Left 
    TopPos = Range("M3").Top 

    'Set the gap between charts 
    Gap = 5 

    'Set the range for the category values 
    For j = 1 To Rng.Columns.Count 
     For i = 2 To Rng.Columns.Count 

      If j Mod 2 = 1 And i Mod 2 = 0 Then _ 
       Set SourceData = Union(Rng.Columns(j), Rng.Columns(i)) 

      'Create the pie charts 

      Set AddtionalCharts = ActiveSheet.Shapes.AddChart.Chart 
      With AddtionalCharts 
       .SetSourceData SourceData, xlColumns 
       .ChartType = xlPie 
       .ApplyDataLabels xlDataLabelsShowValue, False 
       .Parent.Left = LeftPos 
       .Parent.Top = TopPos 
       TopPos = TopPos + .Parent.Height + Gap 
      End With 
     Next i 
    Next j 

End Sub 

В основном, потребности макросов в петлю через колонку и создавать диаграммы, основанные на колоннах четной или нечетное состояние. Например: Chart1 и Answer 1 должны быть одной диаграммой, Chart2 и Answer2 должны быть следующей и так далее.

Сейчас я могу создавать диаграммы, но по некоторым причинам есть еще некоторые дополнительные диаграммы, которые показывают, что мне не нужно. Что я делаю не так?

ответ

0

Я думаю, вам просто нужно включить бит создания круговой диаграммы в ваш конструктор If. Сейчас это не так, поэтому диаграмма создается независимо от того, что.

Что вы делаете это:

If <condition> Then <statement1> 

<statement2> 

Здесь <statement2> всегда будет выполняться независимо от <condition>.

ли это вместо:

If <condition> Then 
    <statement1> 
    <statement2> 
    '... 
End If 

В этом случае <statement2> только запускается на выполнение (наряду с <statement1>), если <condition> выполнено.

В вашем конкретном случае:

  If j Mod 2 = 1 And i Mod 2 = 0 Then 
       Set SourceData = Union(Rng.Columns(j), Rng.Columns(i)) 
       'Create the pie charts 
       Set AddtionalCharts = ActiveSheet.Shapes.AddChart.Chart 
       With AddtionalCharts 
        .SetSourceData SourceData, xlColumns 
        .ChartType = xlPie 
        .ApplyDataLabels xlDataLabelsShowValue, False 
        .Parent.Left = LeftPos 
        .Parent.Top = TopPos 
        TopPos = TopPos + .Parent.Height + Gap 
       End With 
      End If 
Смежные вопросы