创build临时Excel图表

Sub aaGraphing() ' ' aaGraphing Macro ' ' Range("L948:W949,D948:D949").Select Range("D949").Activate ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Range( _ "Analytics!$L$948:$W$949,Analytics!$D$948:$D$949") End Sub 

这段代码创build了我想要的数据图表。 有没有一种方法可以使创build的图表临时存在,以便在单击图表外的任何位置时删除它?

常规模块….

 Option Explicit Public PlotName As String Public PlotRange As Range Sub Tester() AddPlot ActiveSheet.Range("B3:B7,D3:D7") End Sub Sub AddPlot(rng As Range) With ActiveSheet.Shapes.AddChart PlotName = .Name .Chart.ChartType = xlLineMarkers .Chart.SetSourceData Source:=Range(rng.Address()) End With Set PlotRange = rng Application.EnableEvents=False rng.Select Application.EnableEvents=True End Sub Sub RemovePlot(rng As Range) If Not PlotRange Is Nothing Then If Application.Intersect(rng, PlotRange) Is Nothing Then On Error Resume Next rng.Parent.Shapes(PlotName).Delete On Error GoTo 0 End If End If End Sub 

表单代码模块:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) RemovePlot Target End Sub 

您可以使用工作表的SelectionChange事件来删除图表。 下面我假设只有一个形状 – 图表 – 可能在工作表上。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Me.Shapes.Count = 1 Then Me.Shapes(1).Delete End If End Sub 

这是可能的(我相信)dynamic附加此事件,并将其删除。 不过,我认为这有点复杂。

另一种方法可能是使用Application.OnTime在一段时间后删除它。

 Application.OnTime Now + TimeValue("00:00:40"), "ProcedureToDelete" 

将在40秒后运行名为“ProcedureToDelete”的程序。 在这个过程中,您可能需要确保所选内容位于工作表中,而不是您要删除的图表中。

您可以在定时程序中检查当前是否选中图表。 如果没有,删除它,否则重新设置定时器。