2012-08-10 63 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

相关问题