2017-10-18 92 views
0

我有一个插入工作表的宏,然后在该工作表上插入4个图表。这些图表的大小和位置使其具有该工作表中屏幕的四分之一。双击工作表中图表上的事件

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

我最大的绊脚石是如何处理和在有问题的图表上双击事件。我已经能够使它在工作表上工作。但图表似乎很棘手,因为它们最初并不在那里。定位和尺寸是容易的。网上有类似问题的帮助,但他们假设你的图表是一个图表而不是工作表。

任何建议将不胜感激。

+0

你能拿'X,Y'从鼠标光标,如果它是图表的区域在网页中,触发事件......但这似乎相当复杂。也许你可以在每个页面上添加一个按钮来执行相同的操作?这个宏可以更容易编程(只是一个按钮,说“点击放大/缩小图表”)?这可能与[XY问题]有关(https://meta.stackexchange.com/questions/66377/) – BruceWayne

+0

要使双击执行任何操作,您需要使用图表事件。你可以阅读我的教程[Microsoft Excel中的图表事件](https://peltiertech.com/chart-events-microsoft-excel/)。将双击事件与调整图表大小的其他答案中的代码组合在一起。 –

回答

0

您可以为每个图表编写代码。 假设你的图表是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 

希望它有帮助。

+0

将此代码示例插入图表所在工作表的代码窗格上吗? –

+0

是的,您应该为每个图表手动添加此代码。用您创建的对象的名称替换“Chart1”非常重要。 – 2017-10-20 15:14:18

+0

只有您设置了一个类模块来处理图表事件时,代码才会起作用,正如我在本教程[Microsoft Excel中的图表事件]中所述(https://peltiertech.com/chart-events-microsoft-excel/) 。 –

0

易于单击并更改窗口缩放而不是图表大小。你可以修改如上双击。您可能需要更改缩放值。 如果你已经设置好你的图表,你可以使用单元格来定位;您需要使用这些取消选择图表,以便下次用户单击代码时再次运行。否则,他们必须在再次选择之前手动点击图表。

里面一个模块:

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 
+0

这是一个有趣的approuch。我会试一试。 –