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
此代码创建了我想要的数据图表。有没有办法让创建的图表成为临时图,这样当你点击图表之外的任何地方时它会被删除?
答案 0 :(得分:3)
您可以使用工作表的SelectionChange
事件删除图表。下面我假设只有一个形状 - 图表 - 可能在工作表上。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Me.Shapes.Count = 1 Then
Me.Shapes(1).Delete
End If
End Sub
可以(我相信)动态附加此事件并将其删除。但是,我认为它是 little 复杂。
另一种方法可能是在一段时间后使用Application.OnTime
删除它。
Application.OnTime Now + TimeValue("00:00:40"), "ProcedureToDelete"
将在40秒后运行名为'ProcedureToDelete'的过程。在此过程中,您可能希望确保选择位于工作表中,而不是在要删除的图表中。
您可以在定时程序中检查当前是否选择了图表。如果没有,删除它,否则再次设置计时器。
答案 1 :(得分:2)
常规模块......
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