2015-02-19 2 views
0

У меня есть этот код, но когда VBA копирует и вставляет диаграммы на Excelsheet, диаграммы перекрываются.Как упорядочить диаграммы в Excel с помощью VBA?

Есть ли способ организовать их в 1 колонке без перекрытия?

Спасибо!

Sub Test1() 

Dim cht As Excel.ChartObject 

Worksheets("ChartObjects").ChartObjects.Delete 

For Each Sheet In ActiveWorkbook.Worksheets 
If Sheet.Name <> "ChartObjects" Then 

Sheet.Select 
For Each cht In Sheet.ChartObjects 

cht.Select 
cht.Copy 

Sheets("ChartObjects").Select 
Range("C5").Select 
ActiveSheet.Paste 

Next 

End If 
Next Sheet 

End Sub 
+1

Каждый ChartObject имеет ' .Top' и свойство '.height'. Вы должны иметь возможность сформулировать способ выровнять каждую диаграмму на основе этих данных. –

ответ

0

Вы можете использовать .Top и .Left свойства клетки, и .Top и .Height свойства каждого ChartObject, чтобы выровнять каждую последующую диаграмму с нижней предыдущего графика:

Sub foo() 
Dim cht As ChartObject 
Dim newCht As ChartObject 
Dim sht As Worksheet 
Dim chtSht As Worksheet 
Dim top As Double 
Dim left As Double 

'Define the destination worksheet 
Set chtSht = ActiveWorkbook.Worksheets("ChartObjects") 

'Define the starting parameter for the charts 
With chtSht.Range("C5") 
    top = .top 
    left = .left 
End With 

'Iterate the sheets in the workbook 
For Each sht In ActiveWorkbook.Worksheets 
    'Ignore the chtSheet 
    If Not sht.Name = chtSht.Name Then 
     'Iterate the charts in each worksheet 
     For Each cht In sht.ChartObjects 
      'Copy the chart 
      cht.Copy 
      'Paste it in to the destination sheet 
      chtSht.Paste 
      'Get a handle on the chart we just pasted 
      Set newCht = chtSht.ChartObjects(chtSht.ChartObjects.Count) 

      'Assign the top location of this chart 
      newCht.top = top 
      newCht.left = left 
      'Add with the height of this chart to determine the "top" for the next chart 
      top = newCht.top + newCht.Height 

     Next 
    End If 
Next 
End Sub 
+0

Спасибо за внимание! Существует некоторая объектная ошибка, которая мешает ей работать, особенно для команды cht.Copy. Ты знаешь почему? – maximladus

+0

Нет. Это тот же метод, который вы использовали ранее без ошибок, не так ли? Это происходит для всех диаграмм или только одного? Что-то изменилось в вашем файле? Возможно ли рабочий лист защищен? –

+0

Он останавливается на 2-м графике. Все остальное оставалось неизменным до сих пор ... – maximladus

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