Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Manejo de Hojas de Excel con macros

| 4 comentarios

Trabajar en Excel tiene como requisito necesario un buen manejo de hojas, pues es la plataforma donde se trabaja con distintas bases de datos, gráficos, tablas, etc.

Al respecto, Visual Basic permite codificar las principales acciones para un buen manejo de hojas, que incluyen, básicamente, crear una hoja nueva, asignarle un nombre, elegir la posición de esta hoja creada, mover la hoja, ordenarla, seleccionar cualquier hoja determinada y, finalmente, eliminar una hoja.

A continuación se presentan los códigos para cada acción.

En primer lugar, asignar un nombre a la hoja activa se realiza ejecutando la macro "nombrehoja"

Sub nombrehoja()

trabajo1 = ActiveWindow.Caption
Windows(trabajo1).Activate

End Sub

nombrehoja1

Una segunda macro permite insertar una hoja nueva antes de la hoja denominada "trabajo1"

Sub insertahoja()

ActiveWorkbook.Sheets.Add Before:=Worksheets("trabajo1")

End Sub

nombrehoja2

Una tercera macro permitirá insertar una hoja nueva antes de la hoja última, en este caso "hoja 3". El nombre de la hoja será "trabajo1(2)" porque previamente ya se creó una hoja llamada "trabajo1".

Sub intertahoja2()

Sheets("trabajo1").Copy before:=Worksheets(Worksheets.Count)

End Sub

Es importante señalar que si se desea que la hoja se inserte después de la última hoja existente solo se cambia en e l código anterior before por after.

nombrehoja3

Por otro lado, mover una hoja también resultado muy sencillo. La macro siguiente permitirá mover la "hoja 3" después de "trabajo1", si se desea que sea antes solo se cambia  before por after.

Sub moverhoja()
Worksheets("hoja3").Move After:=Worksheets("trabajo1")

End Sub

nombrehoja4

Una quinta macro permite ordenar alfabéticamente las hojas existentes.

Sub ordenahoja()
intNumeroHojas = ActiveWorkbook.Worksheets.Count
For i = 1 To intNumeroHojas
  For j = i To intNumeroHojas
    If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then
      Worksheets(j).Move Before:=Worksheets(i)
    End If
  Next j
Next i

End Sub

nombrehoja5

Por último, si se desea eliminar una hoja se ejecuta el siguiente código.

Sub eliminahoja()
Application.DisplayAlerts = False
 
For i = 1 To Sheets.Count
  Sheets(i).Activate
    xxx = ActiveCell.Worksheet.Name
      If xxx = "trabajo" Then
        ActiveWindow.SelectedSheets.Delete
      End If
Next
 
Application.DisplayAlerts = True
End Sub

 

Elaborado por: Jennifer De la Cruz Guillén

4 comentarios

  1. Buena tarde, me gusto mucho tu aporte

    Yo tengo una duda , por ejemplo , tengo una tabla dinamica que al darle doble clic a la celda de algun dato de resultado, (o clic derecho mostrar detalles) me genera una hoja nueva denominada segun sea el caso hoja1, hoja 2 , depende de cuantas veces genere el reporte, cada vez que pasa esto me direcciona a esa hoja, pero si requiero eliminarla con un macro grabado desde crear macro , solo funciona en la hoja que tenga el nombre que se grabo en el macro (hoja1) pero si genero otro reporte me crea hoja 2, y en ese ya no funciona.

    Algun aporte que me pueda ayudar.

    y Referente a esta hoja es posible darle inscruciones a la tabla dinamica que esa hoja la genere en un nuevo libro.

    Gracias

  2. Saludos Desde Valencia Venezuela.
    Una preguntilla:

    Qué instrucción puedo usar para asignar a una variable string el nombre de una tabla. por egemplo: al ubicarme en el encabezado de la tabla12, usar una instrucción(que es la que no conozco) para lo siguiente:

    codigo VBA:
    TablaActiva = ?????????

    donde el valor resultante de la variable TablaActiva="Tabla12" por ejemplo

    Muchas gracias por tu ayuda

  3. Buenos días, me podrían ayudar en como evaluar que la hoja siguiente a la hoja activa no esté vacía?.
    Muchas gracias por la colaboración

  4. Cómo puedo eliminar varias hojas ocultas con diferentes nombres con macro Visual Basic?.

    Gracias.

Deja una respuesta

Los campos requeridos estan marcados con *.