Tim observa correctamente que un usuario puede hacer clic con el botón derecho en una pestaña de la hoja de trabajo y luego seleccionar Ver código para abrir una hoja de código VBA para la hoja de trabajo. Tiene un código escrito que manipula automáticamente celdas, columnas y filas. Este código debe estar disponible en todas las hojas de trabajo de un libro, incluso si el usuario agrega nuevas hojas de trabajo. Tim se pregunta si hay una manera, usando VBA, de que el código de una hoja de trabajo se copie automáticamente en una nueva hoja de trabajo en el libro de trabajo.

Hay algunas formas de abordar este problema. Una forma, y ​​quizás la forma más sencilla, es eliminar las macros de la hoja de código de la hoja de trabajo y moverlas al módulo ThisWorkbook. La hoja de código de la hoja de trabajo es lo que ve cuando hace clic derecho en una pestaña de la hoja de trabajo. El código en esa hoja está diseñado para manejar eventos que ocurren en la hoja de trabajo y solo en esa hoja de trabajo. Si mueve el código al módulo ThisWorkbook, los eventos aún se pueden manejar, pero esos eventos se aplican a todas las hojas de trabajo del libro.

Por ejemplo, cuando hace clic con el botón derecho en una pestaña de la hoja de trabajo y mira la ventana de código, inicialmente está trabajando en el evento Worksheet_SelectionChange. Si desea mover este código al módulo ThisWorkbook, puede colocarlo dentro del evento Workbook_SheetSelectionChange.

Si tal «cambio de nivel» de su código no funciona por alguna razón, entonces otro enfoque es crear una plantilla de hoja de trabajo dentro del libro de trabajo.

Asígnele un nombre como «MyMaster» y asegúrese de que incluya todo el código que desea agregar a sus hojas de trabajo recién creadas. Incluso puede ocultar esta hoja de trabajo, si lo desea, para que no distraiga a los usuarios. Luego, coloque la siguiente macro en el módulo ThisWorkbook:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim tmpName As String

tmpName = Sh.Name     Sheets("MyMaster").Copy Before:=Sheets(Sh.Name)

Application.DisplayAlerts = False     Sheets(Sh.Name).Delete     Application.DisplayAlerts = True     Sheets("MyMaster (2)").Name = tmpName End Sub

Este código se activa cada vez que se agrega una nueva hoja de trabajo al libro. Mira el nombre de la hoja de trabajo recién agregada (que será algo así como «Hoja4») y guarda ese nombre en una variable temporal.

Luego, el código copia la hoja de trabajo de MyMaster en el libro de trabajo (que también copia las macros en la hoja de trabajo), elimina la hoja de trabajo que se creó originalmente y luego cambia el nombre de la nueva copia de MyMaster para que tenga el mismo nombre que la hoja de trabajo original.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (7884) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Copying_Worksheet_Code_Automatically [Copiando el código de la hoja de trabajo automáticamente].