viernes, 1 de septiembre de 2017

Referencias a partes de una Tabla de Excel mediante VBA


Las Tablas de Excel son un enorme apoyo para la programación en VBA, entre otras cosas,porque son unos objetos que llevan implícitos unos nombres de rango que podemos utilizar a la hora de diseñar nuestro código.

Una determinada Tabla de Excel ya tiene un nombre de rango que hace referencia a ella misma, pero también nombres de rango particulares para la fila de encabezados y para la fila de totales. También, cada una de las filas y de las columnas tienen unas formas de ser referenciadas.

Vamos a ver a continuación cuál es el código necesario para referirnos a esas partes de una tabla o a la tabla entera:

1) Para seleccionar la TABLA ENTERA (encabezados y totales incluidos)


    ActiveSheet.ListObjects("NombreDeMiTabla").Range.Select

2) Para seleccionar solo el CUERPO de la tabla (sin encabezados ni totales)


   ActiveSheet.ListObjects("
NombreDeMiTabla").DataBodyRange.Select

... o bien...

[NombreDeMiTabla].Select

(Al fin y al cabo, un nombre de tabla es un nombre de rango para VBA)

3) Para seleccionar solo la FILA DE ENCABEZADOS de la tabla 


     ActiveSheet.ListObjects("NombreDeMiTabla").HeaderRowRange.Select


4) Para seleccionar solo la FILA DE TOTALES de la tabla 


     ActiveSheet.ListObjects("NombreDeMiTabla").TotalsRowRange.Select

5) Para seleccionar la 3ª COLUMNA (entera o solo el cuerpo) de la tabla
 



     ActiveSheet.ListObjects("NombreDeMiTabla").ListColumns(3).Range.Select
     ActiveSheet.ListObjects("
NombreDeMiTabla").ListColumns(3).DataBodyRange.Select
6) Para seleccionar la 3ª FILA de datos de la tabla


     ActiveSheet.ListObjects("NombreDeMiTabla").ListRows(4).Range.Select


Mediante índices también podemos seleccionar cualquier elemento concreto dentro de los rangos que acabamos de conocer. Por ejemplo:

a) Para seleccionar el 3er encabezado


     ActiveSheet.ListObjects("NombreDeMiTabla").HeaderRowRange(3).Select

b) Para un dato concreto dentro del cuerpo de la tabla


    ActiveSheet.ListObjects("NombreDeMiTabla").DataBodyRange(3, 2).Select



José Manuel Pomares Medrano








11 comentarios:

  1. para poner el nombre de la variable es posible

    ResponderEliminar
  2. No entiendo esa afirmación...o ¿debería ser una pregunta?

    ResponderEliminar
  3. Hola, ¿Cómo sería para referenciar el título de una columna de la tabla? Por ejemplo el título 4. Esto con el fin de poder mover las columnas dentro de la tabla sin que afecte la referncia.

    ResponderEliminar
    Respuestas
    1. Hola, gracias por escribir.
      Puedes ver la respuesta en los apartados 5) y a) del artículo.
      Saludos

      Eliminar
  4. Para el caso 6 b), si yo quisiera seleccionar el dato que está en la columna (o campo) que se llama "Titulo 2" y la fila 3, independientemente de la ubicación en la tabla de dicho campo (porque quizas a posteriori lo mueva), ¿Podrías ayudarme a como sería la sintaxis correcta?

    ResponderEliminar
    Respuestas
    1. Sería:

      ActiveSheet.ListObjects("NombreDeMiTabla").ListColumns("Titulo 2").DataBodyRange.Cells(3,1)

      Saludos

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. en ua macro como borrar el contenido de una tabla ya que la misma varia su rango dependiendo de los datos.

    ResponderEliminar
  7. Buenas noches
    Haciendo referencia a la tabla y después el método ClearContents:

    [NombreDeMiTabla].ClearContents

    Independientemente del número de filas, se elimina el contenido
    Saludos

    ResponderEliminar
  8. Buenos días,

    Muchas gracias por la información, es muy útil.

    Tengo una pregunta. ¿Cómo puedo hacer para seleccionar todas las celdas vacías de una columna específica de una tabla? El objetivo sería eliminar la fila completa de cada una de esas celdas.

    ResponderEliminar
    Respuestas
    1. Puedes grabar una macro que haga las siguientes acciones:
      1) Selecciona el rango afectado
      2) Ve a Inicio / Buscar y seleccionar / Ir a especial... / selecciona la opción "Celdas en blanco".
      3) Ve a Inicio / Eliminar / Filas de hoja (o filas de tabla si estás sobre una tabla de Excel)

      Una vez grabada la macro, copia el código y lo pegas donde corresponda.

      Espero haberte ayudado. Saludos

      Eliminar