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

时间:2012-09-05 09:31:07

标签: excel vba excel-vba

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

3 个答案:

答案 0 :(得分:8)

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

添加工作表的语法是

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

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

FROM EXCEL“S HELP

参数所有4个参数均为可选

  1. Before - 一个对象,指定添加新工作表之前的工作表。
  2. After - 一个对象,指定在其后添加新工作表的工作表。
  3. Count - 要添加的工作表数量。默认值为1。
  4. Type - 指定工作表类型。可以是以下XlSheetType常量之一:xlWorksheetxlChartxlExcel4MacroSheetxlExcel4IntlMacroSheet。如果要基于现有模板插入工作表,请指定模板的路径。默认值为xlWorksheet。
  5. 创建工作表后,您需要使用.insertlines创建相关过程并嵌入要运行的代码。

    注意 - IMP :如果您希望代码在VBA项目中嵌入代码,则需要确保“信任访问VBA项目对象模型 “选中。见快照。

    enter image description here

    以下是我创建工作表然后嵌入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
    

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

    enter image description here

答案 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

SheetsWorksheets可以互换,如图所示。