2012-08-10 66 views
1

我已經創建了一個簡單的工作表宏,當單元格被雙擊時,它將單元格的內容發送到外部程序。起初,我將所有代碼都放在了sheet模塊中,並且必須將其複製到每個我希望使用該功能的工作表。現在,我設法減少工作表模塊中的代碼,以調用標準模塊中的子例程,它可以工作,但我仍然必須將代碼複製到每個需要該功能的工作表。有沒有辦法只在一個地方輸入代碼(標準模塊,工作簿模塊或類模塊),並使其在工作簿中的任何工作表上都可以使用,而無需代碼在工作表後面工作?感謝您的幫助。是否可以創建可在多個工作表上工作的通用宏?

+0

你可以發佈你的代碼嗎? – 2012-08-10 16:58:21

回答

2

您需要工作表上的事件處理程序來處理雙擊。把它放在你想運行雙擊代碼的每張工作表後面的代碼中。

Option Explicit 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    Dim sWorksheet As String 
    Dim sValue As String 
    Dim sCell As String 

    sWorksheet = ActiveSheet.Name 
    sValue = Target.Text 
    sCell = Target.Address 
    Call DoubleClicked(sWorksheet, sValue, sCell) 
End Sub 

把你的主例程放在一個模塊中,而不是在表單上。

Option Explicit 

Sub DoubleClicked(SheetName As String, CellText As String, CellAddress As String) 
    ' your code goes here 
    MsgBox "You double-clicked cell " & CellAddress & " on sheet " _ 
    & SheetName & ". The text in that cell is: " & CellText 
End Sub 

你不想重複在每張紙上邏輯。如果您進行更改,則必須爲每張表單進行更改。通過簡單地調用每個工作表的主例程,您只需編寫並維護一次。

5

ThisWorkbook代碼模塊有一個Workbook_SheetBeforeDoubleClick事件處理程序,您可以使用它來代替在每個工作表上單獨捕獲事件。

+0

+1。如果您希望雙擊在工作簿中的每個工作表上觸發,請使用此操作。如果您不通過檢查排除列表中的工作表,您也可以使用此功能。 – 2012-08-10 17:12:10

+0

是'Workbook_SheetBeforeDoubleClick'是運行宏的正確位置。 – 2012-08-10 18:00:03

相關問題