4

我正在创建一个宏,宏功能的一部分是让 VBA 创建一个新的电子表格。由于分布的性质,名称会改变。我需要在这个电子表格中添加代码。无论如何我可以做到这一点吗?

4

3 回答 3

8

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

添加工作表的语法是

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

如果您查看内置 Excel 的帮助,那么您可以看到Before, After, Count,Type代表什么

来自 EXCEL 的帮助

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

  1. Before- 一个对象,它指定在其之前添加新工作表的工作表。
  2. After - 一个对象,它指定在其后添加新工作表的工作表。
  3. Count - 要添加的张数。默认值为一。
  4. Type - 指定工作表类型。可以是以下 XlSheetType 常量之一:xlWorksheet、、、或。如果要插入基于现有模板的工作表,请指定模板的路径。默认值为 xlWorksheet。xlChartxlExcel4MacroSheetxlExcel4IntlMacroSheet

创建工作表后,您需要使用它.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

这是运行上述代码后新工作表代码区域的外观。

在此处输入图像描述

于 2012-09-05T13:11:42.383 回答
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-Code 添加到这个特定的电子表格中,您应该进一步检查 VBProject 对象 - 查找CodeModule,然后查找InsertLines

对您的进一步提示 - 我会尝试使用您的表格的代码名称。它不太可能被更改 - 但一开始在您的代码中使用它可能不太舒服。我不得不习惯它,但对我来说,它比使用表名有很多好处。

希望这可以帮助 ;)

于 2012-09-05T11:53:03.430 回答
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可以互换,如图所示。

于 2016-08-29T12:46:53.847 回答