我正在创建一个宏,部分宏功能是让VBA创建一个新的电子表格。由于分发的性质,名称将改变。我需要在此电子表格中添加代码。无论如何我能做到吗?
答案 0 :(得分:8)
Jook已经解释了它是如何工作的。我会更进一步。
添加工作表的语法是
expression.Add(Before, After, Count, Type)
如果您检查内置的Excel帮助,那么您可以看到Before
,After
,Count
,Type
代表什么
FROM EXCEL“S HELP
参数(所有4个参数均为可选)
Before
- 一个对象,指定添加新工作表之前的工作表。 After
- 一个对象,指定在其后添加新工作表的工作表。 Count
- 要添加的工作表数量。默认值为1。 Type
- 指定工作表类型。可以是以下XlSheetType常量之一:xlWorksheet
,xlChart
,xlExcel4MacroSheet
或xlExcel4IntlMacroSheet
。如果要基于现有模板插入工作表,请指定模板的路径。默认值为xlWorksheet。 创建工作表后,您需要使用.insertlines
创建相关过程并嵌入要运行的代码。
注意 - IMP :如果您希望代码在VBA项目中嵌入代码,则需要确保“信任访问VBA项目对象模型 “选中。见快照。
以下是我创建工作表然后嵌入Worksheet_SelectionChange
代码的示例,该代码将显示消息“Hello World”
代码 - 经过审核和测试
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
这是运行上述代码后新工作表代码区域的外观。
答案 1 :(得分:2)
以下代码会为您添加电子表格。
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。它不太可能被改变 - 但最初在你的代码中使用它可能不太舒服。我不得不习惯它,但对我而言,使用表名有很多优点。
希望这会有所帮助;)
答案 2 :(得分:0)
默认的.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
可以互换,如图所示。