2015-07-09 3 views
2

У меня есть макрос, который работает, создает новый лист и заполняет его различными графами. Данные для этих графиков взяты из листа 2. Я хочу, чтобы иметь возможность удалить sheet2 после генерации графиков, не теряя всю информацию на графиках. До сих пор я пытался настроить вычисления вручную, защищать листы и защищать диаграммы, используя методы ProtectData и ProtectSelection. Все вышесказанное потерпело неудачу. Есть ли способ использовать vba, чтобы остановить изменения диаграмм после их создания? Благодарю.Как остановить диаграммы от автоматического обновления в excel

Редактировать: Ответ предложил заполнить массив значениями из диапазона, а затем использовать этот массив для генерации диаграммы. Теперь я сталкиваюсь с ошибкой несоответствия типа при попытке создания диаграммы. Можно ли установить исходные данные равными массиву? Вот мой код до сих пор:

Dim PlotRangeBar() As Long 
Dim PlotRangePie As Variant 
Dim XValPie As Variant 
Dim XRangeBar As Range 
Dim CellCount As Long 

'Create bar graph 
Set XRangeBar = ActiveWorkbook.Sheets(2).Range("B" & DataStart & ":B" & DataEnd) 
i = 0 
For Row = DataStart To DataEnd 
    If Cells(Row, UsedColTimesheet).FormulaR1C1 <> "0" And Cells(Row, UsedColTimesheet) <> vbNullString Then 
     ReDim Preserve PlotRangeBar(i) 
     PlotRangeBar(i) = Cells(Row, UsedColTimesheet).Value 
     i = i + 1 
    End If 
Next 

ActiveWorkbook.Sheets(Sheets.Count).Select 
ActiveSheet.Shapes.AddChart.Select 
    With ActiveChart 
     .ChartType = xlColumnStacked 
     .SetSourceData Source:=PlotRangeBar 
     .SeriesCollection.NewSeries 
     .SeriesCollection(1).XValues = XRangeBar 
     .SetElement (msoElementChartTitleCenteredOverlay) 
     .ApplyLayout (1) 
     .ChartTitle.Text = ResourceName & " - Hours per project" 
     .Legend.Delete 
     .ChartStyle = 18 
     .ProtectSelection = True 
    End With 
+2

Есть ли причина, по которой вы хотите удалить лист2, а не скрывать или скрывать его? – Soulfire

+0

Лист2 необязательно должен быть удален, но все данные необходимо удалить. Это связано с тем, что если пользователь хочет сгенерировать еще один лист с графами, им нужно будет вставить данные в лист2, потому что sheet2 - это то место, где программа всегда ищет данные для создания диаграмм. Поэтому, если пользователю нужны два набора графиков, которые соответствуют различным наборам данных, данные для создания первого набора диаграмм не могут существовать в листе2. –

+1

Звучит так, как будто это новый вопрос. – ale10ander

ответ

3

Загрузите данные в массив и использовать массивы, чтобы загрузить ваши графики при их создании.

+0

Это на самом деле то, что я уже делаю. Данные загружаются в массив, получая информацию для заполнения массива из листа2, но, похоже, не имеет значения, может ли информация поступать из листа2 напрямую или поступает из массива, который получает информацию из листа2. Информация в диаграммах все еще теряется, когда информация на листе2 очищается. –

+0

Можете ли вы разместить свой код. Вы должны иметь возможность вводить только данные в эти ячейки, а не ссылку на сами ячейки. Как-то вы все равно должны ссылаться на ячейки вместо данных при создании диаграммы. –

+0

Только что реализованная одна из моих серий - это диапазон, а не массив. Изменение, которое должно исправить. Спасибо за помощь! –