2015-08-01 2 views
0

Приведенный ниже код отлично подходит для изменения размера одной диаграммы на листе или для выбора нескольких диаграмм одного размера. То, что я ищу, - это метод по размеру (и положению) каждой диаграммы по-разному в зависимости от значений ячеек на этом листе.Как изменить размер диаграмм на разные размеры в Excel VBA для Mac?

Sub UpdateChart() 
Dim objCht As ChartObject 
    For Each objCht In ActiveSheet.ChartObjects 
     With objCht.Chart 
    With .Axes(xlValue) 
     .MaximumScale = ActiveSheet.Range("E6").Value 
     .MinimumScale = ActiveSheet.Range("E5").Value 
    End With 
     .Parent.Height = ActiveSheet.Range("E7").Value 
    With .Axes(xlCategory) 
     .MaximumScale = ActiveSheet.Range("D6").Value 
     .MinimumScale = ActiveSheet.Range("D5").Value 
    End With 
     .Parent.Width = ActiveSheet.Range("D7").Value 
End With 
Next objCht 
End Sub 

В то время как внутри For/Next цикла я попытался ссылки названия диаграммы или значения индекса objCht без успеха.

Sub UpdateSomeCharts() 

Dim objCht As ChartObject 
    For Each objCht In ActiveSheet.ChartObjects 
     With objCht.Chart 
     If objCht.Chart.Name = "Part 1 Chart_Plan" Then 
     With .Axes(xlValue) 
      .MaximumScale = ActiveSheet.Range("E6").Value 
      .MinimumScale = ActiveSheet.Range("E5").Value 
     End With 
      Parent.Height = ActiveSheet.Range("E7").Value 
     With .Axes(xlCategory) 
      .MaximumScale = ActiveSheet.Range("D6").Value 
      .MinimumScale = ActiveSheet.Range("D5").Value 
     End With 
      .Parent.Width = ActiveSheet.Range("D7").Value 
     GoTo Size_Charts_Done 

    Else: 
    If objCht.Chart.Name = "Part 1 Chart_Right" Then 
     With .Axes(xlValue) 
      .MaximumScale = ActiveSheet.Range("E6").Value 
      .MinimumScale = ActiveSheet.Range("E5").Value 
     End With 
      Parent.Height = ActiveSheet.Range("E7").Value 
     With .Axes(xlCategory) 
      .MaximumScale = ActiveSheet.Range("D10").Value 
      .MinimumScale = 0 
     End With 
      .Parent.Width = ActiveSheet.Range("D10").Value 
     GoTo Size_Charts_Done 

    Else: 
    If objCht.Chart.Name = "Part 1 Chart_Left" Then 
     With .Axes(xlValue) 
      .MaximumScale = ActiveSheet.Range("E6").Value 
      .MinimumScale = ActiveSheet.Range("E5").Value 
     End With 
      Parent.Height = ActiveSheet.Range("E7").Value 
     With .Axes(xlCategory) 
      .MaximumScale = 0 
      .MinimumScale = -(ActiveSheet.Range("D10").Value) 
     End With 
      .Parent.Width = ActiveSheet.Range("D10").Value 
     GoTo Size_Charts_Done 
Size_Charts_Done: 
End If 
End If 
End If 
End With 
Next objCht 
End Sub 

Использование Debug.Print я могу видеть, что заявления, если работают, но это не будет работать на .Parent.Height. говоря, что он не поддерживается в excel для mac, но эта же строка работает с исходным кодом.

Насколько я понимаю, VBA для Mac - это подмножество того, что доступно на окнах, поэтому не все в этом мире работает в Macville.

ответ

0

Я получил эту работу. У кого-то было большое предложение записать макрос изменений, которые вы хотите, а затем выяснить синтаксис и код из этого. Этот макрос устанавливает минимальные и максимальные значения шкалы, а также изменяет размеры и позиционирует диаграммы на основе данных на листе. Он использует имена диаграмм для применения различных изменений к каждому графику.

Sub UpdateChart() 

ActiveSheet.ChartObjects("Chart_Plan").Activate 
    With ActiveChart.Axes(xlValue) 
     .MaximumScale = ActiveSheet.Range("E6").Value 
     .MinimumScale = ActiveSheet.Range("E5").Value 
    End With 
    With ActiveChart.Axes(xlCategory) 
     .MaximumScale = ActiveSheet.Range("D6").Value 
     .MinimumScale = ActiveSheet.Range("D5").Value 
    End With 

ActiveSheet.ChartObjects("Chart_Right").Activate 
    With ActiveChart.Axes(xlValue) 
     .MaximumScale = ActiveSheet.Range("E6").Value 
     .MinimumScale = ActiveSheet.Range("E5").Value 
    End With 
    With ActiveChart.Axes(xlCategory) 
     .MaximumScale = ActiveSheet.Range("D10").Value 
     .MinimumScale = 0 
    End With 

ActiveSheet.ChartObjects("Chart_Left").Activate 
    With ActiveChart.Axes(xlValue) 
     .MaximumScale = ActiveSheet.Range("E6").Value 
     .MinimumScale = ActiveSheet.Range("E5").Value 
    End With 
    With ActiveChart.Axes(xlCategory) 
     .MaximumScale = 0 
     .MinimumScale = -(ActiveSheet.Range("D10").Value) 
    End With 

    ActiveSheet.Shapes("Chart_Plan").Height = ActiveSheet.Range("E7").Value 
    ActiveSheet.Shapes("Chart_Left").Height = ActiveSheet.Range("E7").Value 
    ActiveSheet.Shapes("Chart_Right").Height = ActiveSheet.Range("E7").Value 
    ActiveSheet.Shapes("Chart_Plan").Top = 2.83 * 120 
    ActiveSheet.Shapes("Chart_Left").Top = 2.83 * 120 
    ActiveSheet.Shapes("Chart_Right").Top = 2.83 * 120 
    ActiveSheet.Shapes("Chart_Plan").Width = ActiveSheet.Range("D7").Value 
    ActiveSheet.Shapes("Chart_Left").Width = 3 * (ActiveSheet.Range("D10").Value) 
    ActiveSheet.Shapes("Chart_Right").Width = 3 * (ActiveSheet.Range("D10").Value) 
    ActiveSheet.Shapes("Chart_Left").Left = 2.83 * 240 
    ActiveSheet.Shapes("Chart_Plan").Left = 2.83 * (240 + (ActiveSheet.Range("D10").Value) + 20) 
    ActiveSheet.Shapes("Chart_Right").Left = (2.83 * (240 + (ActiveSheet.Range("D10").Value) + 40)) + (ActiveSheet.Range("D7").Value) 

End Sub 
Смежные вопросы