【问题标题】:Double Click Event on charts in a worksheet在工作表中的图表上双击事件
【发布时间】:2018-03-30 19:05:08
【问题描述】:

我有一个宏,它插入一个工作表,然后在该工作表上插入 4 个图表。这些图表的大小和位置使它们在该工作表中占据屏幕的四分之一。

现在我想弄清楚如何让用户双击这些图表之一,它将把图表放大到工作表的完整大小。当他们再次双击时,它将恢复到四分之一大小。

我最大的绊脚石是如何处理相关图表上的双击事件。我已经能够使它在工作表上工作。但图表似乎很棘手,因为它们最初并不存在。定位和尺寸是简单的一点。网上有关于类似问题的帮助,但他们认为您的图表是图表而不是工作表。

任何建议将不胜感激。

【问题讨论】:

  • 您可以从鼠标光标处获取X,Y,如果它在页面上的图表区域内,则触发事件...但这似乎很复杂。也许您可以在每个页面上添加一个按钮来做同样的事情?那个宏会更容易编程(只是一个按钮,上面写着“点击放大/缩小图表”)?这可能与XY Problem 接壤
  • 要使双击执行任何操作,您需要使用图表事件。你可以阅读我关于Chart Events in Microsoft Excel的教程。将双击事件与调整图表大小的其他答案中的代码结合起来。

标签: vba excel charts double-click


【解决方案1】:

您可以为每个图表编写代码。 假设您的图表是Chart1, Chart2, Chart3, Chart4。 您可以编写一个 Sub 来修改图表的大小,然后调用每个 BeforeDoubleClick 事件。

Private Sub Chart1_BeforeDoubleClick(ByVal ElementID As Long, _ 
 ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean) 
    Call ChartSize (Chart1)
end Sub

希望对你有帮助。

【讨论】:

  • 此代码示例是否会插入到图表所在工作表的代码窗格中?
  • 是的,您应该为每个图表手动添加此代码。请务必将 Chart1 替换为您创建的对象的名称。
  • 代码只有在你设置了一个类模块来处理图表事件时才能工作,正如我在我的教程Chart Events in Microsoft Excel中描述的那样。
【解决方案2】:

只需单击即可轻松更改窗口缩放而不是图表大小。您可以按上述方式进行修改以进行双击。您可能需要更改缩放值。 如果您已经设置了图表,那么您有用于定位的单元格参考;您需要这些来取消选择图表,以便下次用户单击代码时再次运行。否则,他们必须在再次选择之前手动单击图表。

模块内部:

Sub Setup()
    ActiveSheet.ChartObjects("Chart 1").Activate
    Selection.OnAction = "Chart1_Click"
    ActiveSheet.ChartObjects("Chart 2").Activate
    Selection.OnAction = "Chart2_Click"
    ActiveSheet.ChartObjects("Chart 3").Activate
    Selection.OnAction = "Chart3_Click"
    ActiveSheet.ChartObjects("Chart 4").Activate
    Selection.OnAction = "Chart4_Click"
End Sub

Sub Chart1_Click()
    ChartZoom ("Chart 1")
End Sub

Sub Chart2_Click()
    ChartZoom ("Chart 2")
    '  you could select a cell under the chart here; easier than in the sub below
End Sub

Sub Chart3_Click()
    ChartZoom ("Chart 3")
End Sub

Sub Chart4_Click()
    ChartZoom ("Chart 4")
End Sub

Sub ChartZoom(chartRef As String)
    ActiveSheet.ChartObjects(chartRef).Select 'Activate
    If ActiveWindow.Zoom = 100 Then
        ActiveWindow.Zoom = True
        ' Insert code here to select a range underneath chartRef
    Else
        If ActiveWindow.Zoom <> 100 Then
            ActiveWindow.Zoom = 100
            Range("A1").Select ' <-- Brings back the scroll position to top left
        End If
    End If
End Sub

【讨论】:

  • 这是一个有趣的方法。我会试试看。
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多