我正在创建一个宏,宏功能的一部分是让 VBA 创建一个新的电子表格。由于分布的性质,名称会改变。我需要在这个电子表格中添加代码。无论如何我可以做到这一点吗?
3 回答
Jook 已经解释了它是如何工作的。我会更进一步。
添加工作表的语法是
expression.Add(Before, After, Count, Type)
如果您查看内置 Excel 的帮助,那么您可以看到Before
, After
, Count
,Type
代表什么
来自 EXCEL 的帮助
参数(所有4个参数都是可选的)
Before
- 一个对象,它指定在其之前添加新工作表的工作表。After
- 一个对象,它指定在其后添加新工作表的工作表。Count
- 要添加的张数。默认值为一。Type
- 指定工作表类型。可以是以下 XlSheetType 常量之一:xlWorksheet
、、、或。如果要插入基于现有模板的工作表,请指定模板的路径。默认值为 xlWorksheet。xlChart
xlExcel4MacroSheet
xlExcel4IntlMacroSheet
创建工作表后,您需要使用它.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
这是运行上述代码后新工作表代码区域的外观。
以下代码将为您添加一个电子表格。
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-Code 添加到这个特定的电子表格中,您应该进一步检查 VBProject 对象 - 查找CodeModule,然后查找InsertLines。
对您的进一步提示 - 我会尝试使用您的表格的代码名称。它不太可能被更改 - 但一开始在您的代码中使用它可能不太舒服。我不得不习惯它,但对我来说,它比使用表名有很多好处。
希望这可以帮助 ;)
默认.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
可以互换,如图所示。