将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
说明
为了这个代码的工作,你需要允许以下两件事情:
- 转至工具 >> 参考 ,并添加一个引用“ Microsoft Visual Basic for Applications Extensibility ”库(下面的屏幕截图)
- 在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
(只是把它放在循环中)