如何使用VBA添加VBA代码的新电子表格
我正在创build一个macros,部分macrosfunction是让VBA创build一个新的电子表格。 由于分配的性质,名称将会改变。 我需要将代码添加到此电子表格。 无论如何,我可以做到这一点?
Jook已经解释了它是如何工作的。 我会更进一步。
添加工作表的语法是
expression.Add(Before, After, Count, Type)
如果你检查内置Excel的帮助,那么你可以看到Before
, After
, Count
, Type
代表
从EXCEL“帮助
参数 ( 所有4个参数都是可选的 )
-
Before
– 指定添加新工作表之前的工作表的对象。 -
After
– 一个对象,用于指定添加新工作表之后的工作表。 -
Count
– 要添加的页数。 默认值是1。 -
Type
– 指定表单types。 可以是以下XlSheetType常量之一:xlWorksheet
,xlChart
,xlExcel4MacroSheet
或xlExcel4IntlMacroSheet
。 如果要根据现有模板插入工作表,请指定模板的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
如图所示, Sheets
和Worksheets
是可以互换的。