"Stuck in NJ" hizo la pregunta de esta semana:
Estoy creando un libro de Excel que contiene gráficos de cifras de ventas. La primera hoja de cálculo de Excel corresponde al primer territorio de ventas de la empresa (por ejemplo, FL01). El nombre de la pestaña de la hoja de cálculo (así como la celda A1) es el número de territorio de ventas FL01. Los datos que impulsan los gráficos están a la derecha (fuera del rango imprimible que configuré) y se completan desde otro libro de Excel utilizando BUSCARV con el número de territorio de ventas FL01 en la celda A1 como clave de búsqueda. Necesito agregar al libro de trabajo 76 hojas de trabajo idénticas (una para cada territorio de ventas) de modo que el nombre de la pestaña de cada hoja y la celda A1 sean iguales a los números de territorio de ventas sucesivos (por ejemplo, FL01, FL02, LK01, LK02). ¿Cómo hago eso en un forma automatizada?
Esto se logra fácilmente con una macro VBA, pero permítanme cubrir el consejo para hacerlo manualmente. Una vez que haya configurado una hoja con formato y rangos de impresión, puede duplicar fácilmente la hoja haciendo clic con el botón derecho en la pestaña de esa hoja. En el menú que aparece, elija Mover o Copiar. En el cuadro de diálogo Mover o Copiar, seleccione "(mover hasta el final)" y marque la casilla "Crear una copia", luego haga clic en Aceptar. Se agregará una copia de su hoja con formato como una nueva hoja de trabajo en su libro de trabajo. (Para acelerar este proceso, mantenga presionada la tecla Ctrl mientras arrastra la pestaña de la hoja de trabajo hacia la derecha). Por lo general, querrá cambiar el nombre de la hoja. Haga clic con el botón derecho en la nueva pestaña, elija cambiar el nombre y escriba un nombre significativo.
Para que la macro de Excel funcione, necesita una lista de territorios. Antes de escribir la macro, inserte una nueva hoja en este libro llamada Datos. En la celda A1, ingrese el segundo territorio de ventas (FL02 en su ejemplo). Continúe ingresando todos los territorios de ventas hacia abajo en la columna A. No deje filas en blanco.
Inserte una nueva macro y copie este código:
Public Sub CopyIt() Sheets("Data").Select ' Determine how many territories are on Data sheet FinalRow = Range("A65000").End(xlUp).Row ' Loop through each territory on the data sheet For x = 1 To FinalRow LastSheet = Sheets.Count Sheets("Data").Select ThisTerr = Range("A" & x).Value ' Make a copy of Fl01 and move to end Sheets("FL01").Copy After:=Sheets(LastSheet) ' rename the sheet and set A1 = to the territory name Sheets(LastSheet + 1).Name = ThisTerr Sheets(ThisTerr).Select Range("A1").Value = ThisTerr Next x End Sub
La macro utiliza el comando de copia Sheets (). Que hace lo mismo que hacer clic en Mover o Copiar manualmente. Antes de hacer cada copia, averiguo la cantidad de hojas usando la propiedad Sheets.Count. Sé que si hay 56 hojas e inserto una nueva hoja, se hará referencia a ella como Hojas (57). Me parece algo impredecible adivinar cómo Excel nombrará la nueva hoja, así que utilizo números de índice numéricos para identificar la hoja. Una vez que cambie el nombre de la nueva hoja con "Sheets (LastSheet + 1) .Name = ThisTerr", puedo volver a mi método preferido para referirme a la hoja usando su nombre.
Tenga en cuenta que la lista de territorios no debe contener FL01 en la lista. Intentar cambiar el nombre de una copia a una copia de FL01 con el mismo nombre provocará un error en la macro.