1
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

此代码创建我想要的数据图表。有没有办法使创建的图表成为临时图表,以便当您单击图表外部的任何位置时它会删除?

4

2 回答 2

3

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

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

可以(我相信)动态附加此事件并将其删除。但是,我认为这有点复杂。

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

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

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

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

于 2013-06-26T18:48:43.623 回答
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
于 2013-06-26T20:29:40.223 回答