2017-10-18 52 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。我會試一試。 –