如何使用VBA添加VBA代码的新电子表格

我正在创build一个macros,部分macrosfunction是让VBA创build一个新的电子表格。 由于分配的性质,名称将会改变。 我需要将代码添加到此电子表格。 无论如何,我可以做到这一点?

Jook已经解释了它是如何工作的。 我会更进一步。

添加工作表的语法是

expression.Add(Before, After, Count, Type) 

如果你检查内置Excel的帮助,那么你可以看到BeforeAfterCountType代表

从EXCEL“帮助

参数所有4个参数都是可选的

  1. Before – 指定添加新工作表之前的工作表的对象。
  2. After – 一个对象,用于指定添加新工作表之后的工作表。
  3. Count – 要添加的页数。 默认值是1。
  4. Type – 指定表单types。 可以是以下XlSheetType常量之一: xlWorksheetxlChartxlExcel4MacroSheetxlExcel4IntlMacroSheet 。 如果要根据现有模板插入工作表,请指定模板的path。 默认值是xlWorksheet。

一旦表格被创build,那么你需要使用.insertlines来创build相关的过程,并embedded你想要运行的代码。

注 – IMP :如果你想让代码在VBA项目中embedded代码,你需要确保你有“ 信任访问VBA项目对象模型 ”的select。 看快照。

在这里输入图像说明

这是一个例子,我创build一个工作表,然后embedded一个Worksheet_SelectionChange代码,它将显示一个消息“Hello World”

代码 – 试用和testing

 Option Explicit Sub Sample() Dim ws As Worksheet Dim nLines As Long Dim VBP As Object, VBC As Object, CM As Object Dim strProcName As String Set ws = Worksheets.Add Set VBP = ThisWorkbook.VBProject Set VBC = VBP.VBComponents(ws.Name) Set CM = VBC.CodeModule strProcName = "Worksheet_SelectionChange" With ThisWorkbook.VBProject.VBComponents( _ ThisWorkbook.Worksheets(ws.Name).CodeName).CodeModule .InsertLines Line:=.CreateEventProc("SelectionChange", "Worksheet") + 1, _ String:=vbCrLf & _ " Msgbox ""Hello World!""" End With End Sub 

一旦你运行上面的代码,这就是新的表单代码区域。

在这里输入图像说明

以下代码将为您添加一个电子表格。

 Public Sub Workbook_Add() Dim wks As Worksheet Set wks = ThisWorkbook.Worksheets.Add(, , 1, xlWorksheet) With wks 'set codename of wks ThisWorkbook.VBProject.VBComponents(.CodeName).Name = "tblWhatever" 'set tablename of wks .Name = "whatever" 'add code (untested demo) 'ThisWorkbook.VBProject.VBComponents(.CodeName).CodeModule.InsertLines 1, "Option Explicit" 'add code (as of example from excel-help) 'Application.VBE.CodePanes(1).CodeModule.InsertLines 1, "Option Explicit" End With End Sub 

如果您需要将VBA代码添加到此特定的电子表格中,则应进一步检查VBProject对象 – 查找CodeModule ,然后查找InsertLines

给你一个进一步的提示 – 我会尝试使用你的表的CodeNames。 这是不太可能被改变 – 但它可能不是很舒服的使用你的代码在第一次。 我必须习惯它,但是对于我来说,使用表名称有很多好处。

希望这可以帮助 ;)

默认的.Add方法在列表的开始处添加一个表格。 通常你想在添加代码行之前添加它,正如Siddarth Rout所解释的那样。 要做到这一点,你可以使用:

  ActiveWorkbook.Worksheets.ADD After:=ActiveWorkbook.Sheets(ActiveWorkbook.Worksheets.Count) 

如果您已经定义并设置了WB,则更容易阅读:

  Dim WB as Excel.workbook Set WB = ActiveWorkbook WB.Sheets.ADD After:=WB.Sheets(WB.Sheets.Count) Set VBC = ActiveSheet 'If using in Siddarth Rout's code above 

如图所示, SheetsWorksheets是可以互换的。