将BeforeDoubleClick_event的模块代码添加到dynamic创build的工作表

我有这个代码:

For a = 1 To 5 strFoglio = "SheetName" & a Sheets.Add ActiveSheet.Name = strFoglio ActiveSheet.Move after:=Sheets(Sheets.Count) Next a 

有没有办法在这些全新的工作表上编写代码:

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myRange As Range End sub 

当然,我想直接在For...Next循环中,而不是手动。

下面的代码将运行你的For循环,创build5个工作表,每个工作表将调用一个Sub CodeCopy ,它将代码行从一个模块(本例中为“Sheet1”中的代码)复制到新创build的工作表中。

 Option Explicit Sub CreateSheets() Dim a As Long For a = 1 To 5 Sheets.Add ActiveSheet.Name = "SheetName" & a ActiveSheet.Move after:=Sheets(Sheets.Count) Call CodeCopy(ActiveSheet.Name) Next a End Sub ' ********** Sub CodeCopy(DestShtStr As String) ' Macro to copy the macro module from sheet1 to a new Sheet ' Name of new sheet is passed to the Sub as a String ' Must install "Microsoft Visual Basic for Applications Extensibility library" ' from Tools > References. Dim i As Integer Dim SrcCmod As VBIDE.CodeModule Dim DstCmod As VBIDE.CodeModule ' set source code module to code inside "Sheet1" Set SrcCmod = ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Worksheets("Sheet1").CodeName).CodeModule Set DstCmod = ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Worksheets(DestShtStr).CodeName).CodeModule ' copies all code line inside "Sheet1" ' can be modified to a constant number of code lines For i = 1 To SrcCmod.CountOfLines DstCmod.InsertLines i, SrcCmod.Lines(i, 1) Next i End Sub 

Sheet1 ”中的代码将被复制到所有新创build的工作表中:

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myRange As Range End Sub 

说明

为了这个代码的工作,你需要允许以下两件事情:

  1. 转至工具 >> 参考 ,并添加一个引用“ Microsoft Visual Basic for Applications Extensibility ”库(下面的屏幕截图)

在这里输入图像说明

  1. 在Excel主菜单中,进入开发者菜单,然后selectmacros安全性 ,单击V以允许“ 信任访问VBA项目对象模型 ”(下面的屏幕截图)

在这里输入图像说明

如果我理解的很好,你想直接在用你的初始代码创build的新工作表上创build代码。

所以我会这样做:

 Code(1) = Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Code(2) = Dim myRange As Range Code(3) = '.... For i = 1 To 3 Wb.VBProject.VBComponents("SheetName & a").CodeModule.InsertLines i, Code(i) Next i 

(只是把它放在循环中)