可以创建一个适用于多个工作表的通用宏吗?

时间:2012-08-10 16:47:42

标签: excel vba excel-vba events worksheet

我创建了一个简单的工作表宏,在双击单元格时将单元格的内容发送到外部程序。起初,我拥有了表单模块中的所有代码,并且必须将其复制到我想要其功能的每个表单上。现在,我设法将工作表模块中的代码减少到调用标准模块中的子程序,它可以工作,但我必须将代码复制到我需要其功能的每个工作表上。有没有办法只在一个地方(标准模块,工作簿模块或类模块)输入代码,并让它在工作簿中的任何工作表上运行,而工作表后面没有代码?谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

ThisWorkbook代码模块有一个Workbook_SheetBeforeDoubleClick事件处理程序,您可以使用它而不是在每张工作表上单独捕获事件。

答案 1 :(得分: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

您不希望在每张纸上重复逻辑。如果进行更改,则必须为每张纸更改它。只需从每张表中调用主例程,您只需编写并维护一次。