我有一个运行a的宏生成一个新工作表并用各种图表填充它。这些图表的数据来自sheet2。我希望能够在生成图形后删除sheet2,而不会丢失图形中的所有信息。到目前为止,我已尝试使用ProtectData和ProtectSelection方法将计算设置为手动,保护工作表和保护图表。所有这些都失败了。有没有办法使用vba阻止图表生成后更改?感谢。
编辑: 答案建议使用范围中的值填充数组,然后使用该数组生成图表。现在,我在尝试生成图表时遇到类型不匹配错误。是否可以将源数据设置为等于数组?到目前为止,这是我的代码:
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
答案 0 :(得分:3)
将数据加载到数组中,并在创建数据时使用数组加载图表。