【问题标题】:How to add a new spreadsheet with VBA-Code, using VBA如何使用 VBA 添加带有 VBA 代码的新电子表格,使用 VBA
【发布时间】:2016-08-29 20:46:53
【问题描述】:

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    Jook 已经解释了它的工作原理。我会更进一步。

    添加工作表的语法是

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

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

    来自 EXCEL 的帮助

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

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

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

    【讨论】:

      【解决方案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

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

      希望这会有所帮助;)

      【讨论】:

        【解决方案3】:

        默认的.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 可以互换,如图所示。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-23
          • 2011-10-13
          • 2017-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-12
          相关资源
          最近更新 更多