Cómo agregar una nueva hoja de cálculo con VBA-Code, usando VBA

Estoy creando una macro y parte de la función de las macros es hacer que VBA cree una nueva hoja de cálculo. Debido a la naturaleza de la distribución, el nombre cambiará. Necesito agregar código a esta hoja de cálculo. ¿Hay alguna forma de que pueda hacer esto?

preguntado el 05 de septiembre de 12 a las 10:09

3 Respuestas

Jook ya ha explicado cómo funciona. Voy a dar un paso más.

La sintaxis de agregar una hoja de cálculo es

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

Si revisa la ayuda de Excel incorporada, puede ver qué Before, After, Count, Type representa

DE LA AYUDA DE EXCEL

parámetros (Los 4 parámetros son opcionales)

  1. Before - Un objeto que especifica la hoja antes de la cual se agrega la nueva hoja.
  2. After - Un objeto que especifica la hoja después de la cual se agrega la nueva hoja.
  3. Count - El número de hojas a añadir. El valor predeterminado es "uno"
  4. Type - Especifica el tipo de hoja. Puede ser una de las siguientes constantes XlSheetType: xlWorksheet, xlChart, xlExcel4MacroSheet o el xlExcel4IntlMacroSheet. Si está insertando una hoja basada en una plantilla existente, especifique la ruta a la plantilla. El valor predeterminado es xlWorksheet.

Una vez que se crea la hoja, debe usar .insertlines para crear el procedimiento relevante y también para incrustar el código que desea ejecutar.

NOTA - IMP: si desea que el código incruste el código en el proyecto de VBA, debe asegurarse de tener "Confiar en el acceso al modelo de objetos del proyecto VBA" seleccionado. Ver instantánea.

enter image description here

Aquí hay un ejemplo en el que estoy creando una hoja y luego incrustando un Worksheet_SelectionChange Código que mostrará un mensaje "Hello World"

CÓDIGO - PROBADO Y PROBADO

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

Así es como se ve el área del código de la nueva hoja una vez que ejecuta el código anterior.

enter image description here

Respondido el 05 de Septiembre de 12 a las 14:09

el siguiente código le agregará una hoja de cálculo.

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

Si necesita agregar código VBA a esta hoja de cálculo específica, debe inspeccionar más el objeto VBProject: busque Módulo de código y luego es decir Insertar Líneas.

Otra pista para usted: intentaría usar los CodeNames de sus tablas. Es menos probable que se cambie, PERO puede que no sea tan cómodo de usar en su código al principio. Tuve que acostumbrarme, pero para mí tiene muchas ventajas frente a usar un nombre de tabla.

Espero que esto ayude ;)

Respondido el 05 de Septiembre de 12 a las 13:09

El valor por defecto .Add El método agrega una hoja al comienzo de la lista. A menudo quieres agregarlo al final antes de agregar las líneas de código, como se explica en Ruta Siddarth. Para hacer eso en cualquier lugar puedes usar:

    ActiveWorkbook.Worksheets.ADD  After:=ActiveWorkbook.Sheets(ActiveWorkbook.Worksheets.Count)

Es más fácil de leer si ha definido y configurado 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 y Worksheets son intercambiables, como se ilustra.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.