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
para poner el nombre de la variable es posible
ResponderEliminarNo entiendo esa afirmación...o ¿debería ser una pregunta?
ResponderEliminarHola, ¿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.
ResponderEliminarHola, gracias por escribir.
EliminarPuedes ver la respuesta en los apartados 5) y a) del artículo.
Saludos
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?
ResponderEliminarSería:
EliminarActiveSheet.ListObjects("NombreDeMiTabla").ListColumns("Titulo 2").DataBodyRange.Cells(3,1)
Saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminaren ua macro como borrar el contenido de una tabla ya que la misma varia su rango dependiendo de los datos.
ResponderEliminarPuedes usar esto:
EliminarRange("NombreTabla").Rows.Delete
Buenas noches
ResponderEliminarHaciendo referencia a la tabla y después el método ClearContents:
[NombreDeMiTabla].ClearContents
Independientemente del número de filas, se elimina el contenido
Saludos
Buenas tardes. El comando sirve, sin embargo, existe uno que permita demás de borrar el contenido, elimine todas las filas de la tabla, de tal suerte que se muestre la tabla original, sin filas, obviamente, solo mostrará la primera, (que no son los encabezados) que es la que no se puede borrar. Gracias.
EliminarBuenos días,
ResponderEliminarMuchas 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.
Puedes grabar una macro que haga las siguientes acciones:
Eliminar1) 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
tengo una pregunta como hago para recorrer la primera columna y detectar filas vacías en la tabla para después mandar un mensaje que hacen falta datos y no pasar al siguiente paso de la macro
ResponderEliminargracias y slaudos.
Hola, ¿Como puedo saber el numero de fila seleccionada (de una tabla creada)?
ResponderEliminarNo el numero de la hoja excel, el número de fila de la tabla (seleccionando una celda de ella).
Gracias
Una posibilidad es utilizar
EliminarActiveCell.Row - Nº de filas por encima de la tabla
Saludos
Creo que el siguiente caso no esta contemplado;
ResponderEliminarQuiero seleccionar la fila X de una tabla,pero no toda la fila, me interesa desde la columna [ENE-01] hasta [ENE-15].
Como se haría?
Este comentario ha sido eliminado por el autor.
EliminarPara los casos no contemplados puedes utilizar algo como:
EliminarRange(Range("miTabla").cells(fil,col), Range("miTabla").Cells(fil,col))
Donde miTabla es un ejemplo de nombre de tabla de Excel
Donde fil y col son los números de fila y columna de la tabla (no de Excel)
Saludos
Hola.
ResponderEliminarPara activar o desactivar un filtro en una tabla primero debo saber si ya tiene un filtro activado o no para que no me de error.
¿Como puedo comprobarlo? ¿Como podría además saber si la celda activa actual está colocada dentro de una tabla o no?
Por ello, antes de activar o desactivar un filtro con VBA, debes poner:
EliminarActiveSheet.ListObjects("Tabla1").Range.AutoFilter Field:=1
De esta forma "reinicias" el filtro para poder aplicar otro distinto
Para saber si la celda activa está dentro de una tabla puedes utilizar un condicional, del tipo:
If ActiveCell.Row > 10 And ActiveCell.Row < 20 And ActiveCell.Column > 5 And ActiveCell.Row < 15 Then ......
Y si la tabla puede crecer o decrecer a lo ancho (por ejemplo), los números del código anterior deben ser dinámicos, por ejemplo aplicando una variable cuyo valor sea el resultado de.... (por ejemplo)
Dim anchoTabla as Integer
anchoTabla = Range(PrimeraCeldaTabla,PrimeraCeldaTabla.End(xlToRight)).Columns.Count
De esta forma ya sabes el número actual de columnas de la tabla (solo deberías agregar a la variable las columnas que hay a la izquierda de la tabla).
Saludos
Hola,
ResponderEliminarsi quisiera eliminar una fila de la tabla, el cual seria escogida de un listbox en donde se encuentra una lista de datos, ¿como se haria? perdone mi ignorancia, soy novato en esta materia de macros
hola, como puedo hacer un macro que me permita ingresar datos al final de una tabla presionando un boton. tomando en cuenta que quiero apuntar a la tabla en especifico y no a la fila de la hoja, ya que la tabla podria moverla de ubicacion. existe algun comando que agregue una fila mas a la tabla? gracias
ResponderEliminarBUenos días:
EliminarDebes escribir:
ActiveSheet.ListObjects("NombreDeMiTabla").ListRows(1).Add
...para que te egregue una dila en primera posición de la tabla.
Saludos
Lo del final de la instrucción está erroneamente alreves. Más bien es asi: ActiveSheet.ListObjects("NombreDeMiTabla").ListRows.Add(1)
EliminarCordial saludo, si ya seleccioné toda una columna de datos y la tengo guardada en una variable, ¿qué función de vba me sirve para determinar el tamaño de ese vector? Necesito recorrer todas las celdas de esa columna en un for y la tabla irá creciendo con el tiempo, entonces necesito una función que pueda determinar constantemente su dimensión para que constantemente recorra todas las celdas de la columna. Gracias!
ResponderEliminarSi tienes una columna guardada en una variable de objeto, puedes hacer:
EliminarMsgBox miVariable.Rows.Count
Y obtendrás el número de filas del objeto
Espero haberte ayudado
Gracias! Lo intentaré
EliminarBuenas tardes, intento quitar el formato de una hoja, la cual incluye una tabla, con el sigueinte codigo no funciona:
ResponderEliminarCells.Select
Selection.ClearFormats
Creo que podria hacerlo si pongo el nombre de la tabla, pero la cuestion esque la macro la voy a usar para ejecutarla en varias hojas, por ende varias tablas, diferentes nombres.
Podrian ayudarme.?
Desde ya muchas gracias.!!!
Hola, al final encontre como hacerlo, pero me di cuenta que no resilvi el problema, porque lo que en verdad necesitaba era convertir la tabla a rango, y de esa poder eliminar columnas y filas para un reporte personalizado.
ResponderEliminarComo voy a trabajar con diferentes tablas, lo que hice primero fue obtener el nombre de la tabla para luego poder eliminarla como tal y que solo quedara como rango normal.
Sub EliminarTabla()
'Declaro las variables
Dim NombreTablaActiva As String
Dim Tabla As ListObject
Sheets("Hojaxxx").Select
'Convierte la tabla en Rango, es decir quita el formato de Tabla
NombreTablaActiva = ActiveCell.ListObject.Name
'Quitar el formato de tabla
ActiveSheet.ListObjects(NombreTablaActiva).TableStyle = ""
'Elimina el formato de tabla y solo queda el contenido como un rano normal
ActiveSheet.ListObjects(NombreTablaActiva).Unlist
End sub
Espero le sirva a alguien.
Saludos.!
Buenos días.
ResponderEliminarPrimero felicitarte por compartir tus grandes conocimientos.
Este hilo es la mejor info en relación al manejo y referencias a tablas.
Como podría seleccionar/copiar una tabla de otro libro sin necesidad de conocer la hoja que la contiene? Igual que cuando lo hago desde el libro activo, que no hay que nominar la hoja
Muchas gracias
Considerando que:
Eliminar1) La tabla está en Libro1
2) El código está en Libro2
3) La tabla se llama Tabla1
... una posibilidad sencilla es:
Workbooks("Libro1.xlsx").Activate
[Tabla1].Copy
Workbooks("Libro2.xlsx").Activate
En ningún momento utilizas el nombre de la hoja. La clave es que si tienes activo el libro que contiene la tabla, a esta la puedes nombrar solo por su nombre.
Saludos.
Muchas gracias por la respuesta, sólo que devuelvo el valor del registro n (pedido por parm) de la primera columna desde una función y, si puedo evitarlo, no me gustaría tener que volver a activar el libro sobre el que trabajo después de cada uso de la función.
ResponderEliminarSaludos
Este comentario ha sido eliminado por el autor.
Eliminarhola, como puedo escoger especificamente uno de los titulos de la tabla? el titulo esta ubicado visualmente en A1, pero para la tabla A1 es A2. Como me ubico en ese titulo? gracias
ResponderEliminarHOla Charles
EliminarLo tienes en el propio artículo:
ActiveSheet.ListObjects("NombreDeMiTabla").HeaderRowRange(3).Select
Donde debes cambiar el número 3 por el número de encabezado que quieras
Saludos.
Hola muy buenas. Muchas gracias por los consejos.
ResponderEliminarTengo un problema, cómo puedo hacer una búsqueda en una determinada columna de la tabla. Utilizando una variable.
Muchas gracias
Puedes utilizar:
EliminarMiVariable = WorksheetFuntion.VLookup(valor_buscado, Matriz, Índice columna, Ordenado)
Por ejemplo.
Saludos.
ok Gracias
EliminarHola, hay alguna manera de seleccionar varias columnas discontinuas de la tabla?
ResponderEliminarSería algo así, por ejemplo:
EliminarSub seleccionDiscontinua()
Dim vRng1 As Range, vRng2 As Range
Set vRng1 = ActiveSheet.ListObjects("Tabla1").ListColumns(1).Range
Set vRng2 = ActiveSheet.ListObjects("Tabla1").ListColumns(3).Range
Application.Union(vRng1, vRng2).Select
End Sub
Saludos
hola y muchas gracias por su ayuda.
ResponderEliminarcomo podría hacer para que una macro reconozca que se ha borrado hasta el último dato de la última fila de una tabla, luego como la fila quedó vacía entonces redimensione la tabla (sin la fila vacía).
obviamente tendría que ocurrir en el evento worksheet_change de la hoja donde está la tabla.
gracias por su atención.
Hola!!! Me gustaría saber cómo puedo poner un nombre de tabla variable y usarlo. El nombre sería asi: “Tabla” & Sheet.index
ResponderEliminarGracias por su ayuda
Hola Isa.
EliminarSería algo como:
Hoja1.ListObjects("MiTabla").Name = "Tabla" & ActiveSheet.Index
Donde MiTabla es el nombre actual y "Tabla" ActiveSheet.Index será el nombre futuro.
Saludos.
Muchísimas gracias por tu rápida respuesta. Creo que no me he expresado bien. Lo que quiero es asignar ese nombre a una variable para luego poder usarla. Te escribo el código:
Eliminar.ListObjects.Add(xlSrcRange, Range("A1:F1"), , xlYes).Name = "Tabla" & oSh.Index
.ListObjects("Tabla" & oSh.Index).ShowAutoFilterDropDown = False
No me deja crear una variable y asignarle "Tabla" & Osh.Index.
Muchas gracias por todo
En teoría debe estar bien el código. Deberías saber qué es lo que te da el error, concretamente.
Eliminar¿Seguro que OSh.Index devuelve algo que no es un error?
Aunque oSh.Index devuelva un número de índice, al unirlo con "Tabla" genera un nombre que ya existe y por lo tanto un error?
Mete en una variable de texto primero la cadena "Tabla"& oSh.Index para ver que todo eso no genera un error y para ver también que el nombre de tabla generado no está repetido y es válido.
Saludos.
Lo de meter en una variable de texto la cadena ya lo he probado y me daba error. Ya lo he solucionado creando una función:
EliminarFunction nomtab() As String
nomtab = "Tabla" & ActiveSheet.Index
End Function
Muchísimas gracias por todo. Espero que esto pueda ayudar a más personas. Saludos.
Tengo otro problema. Quiero rellenar la columna de una tabla (que se crea automáticamente al añadir una hoja nueva) con datos de la columna de otra tabla que está en otra hoja. Ya no sé qué probar. Gracias nuevamente por vuestra ayuda.
ResponderEliminarPodría ser algo como
EliminarWith Range("TablaDestino[ColumnaDestino]")
.ClearContents
Range("TablaOrigen[ColumnaOrigen]").Copy
.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End With
Saludos
Gracias por vuestra ayuda, pero da Error en el método 'Range' de objeto '_Worksheet'
EliminarPero... ¿has cambiado los nombres de tabla y de columna en los sitios correspondientes? (TablaDestino, ColumnaDestino, TablaOrigen, ColumnaOrigen) ... ¡¡¡Deben ser los nombres de tus tablas!!!
EliminarSaludos
Hola, ¿Cómo saber el número de fila de la tabla, donde se encuentra el dato buscado?
ResponderEliminarLa tabla se llama TblPruebas, el dato buscado está en Columns(1) y la variable tipo String Compra tiene el texto buscado. Este código de abajo usa Find... busca en número de fila en la hoja y le resta el nro de fila donde están los encabezados de la tabla, así calcula cual fila de es de la tabla. ¿No hay un método mas directo?
ResponderEliminarWith Range("TblPrueba").ListObject
Set Celda = .DataBodyRange.Columns(1).Find(Detalle, lookAt:=xlWhole)
y = .ListRows(Celda.Row - .HeaderRowRange.Row)
......
end with
Perdón, la variable tipo String es Detalle (no Compra como puse en el mensaje anterior).
ResponderEliminarUna solución sería:
EliminarWith [Tabla1].Columns(1)
nFilTbl = .Rows.Count
For i = 1 To nFilTbl
If .Cells(i, 1).Value = "ValorBuscado" Then Exit For
Next i
End With
MsgBox "El valor buscado está en la fila " & i & " de la tabla:"
Como ves, es muy distinta y no utiliza Find
No se si es lo que buscabas
Saludos.
Hola buenas tardes,
ResponderEliminarEs posible ordenar el objeto tabla por una columna, como sería la forma?
Muchas gracias
Hola Carlos.
EliminarEs posible, pero no tiene relación con código VBA propio de tablas de Excel, sino código propio de ordenación de columnas.
Incluso más sencillo y directo que yo te lo explique es que grabes una macro y veas el código resultante.
Saludos.
Muchas gracias, lo estoy haciendo, buscaba algo más específico, como ordenar la tabla por el nombre directamente.
EliminarConsulta quiero asignar las 3 primeras columnas de mi tabla a la propiedad Rowsource de un combobox dentro de un userform. Como lo hago, o tendre que hacerlo de forma manual la carga???
ResponderEliminarHola,
ResponderEliminarquisiera ponerle nombre a un rango de celdas variable:
Dim last_row, last_col As Long
'Get last row
last_row = Cells(Rows.Count, 2).End(xlUp).Row
'Get last column
last_col = Cells(4, Columns.Count).End(xlToLeft).Column
'Select entire table
Range(Cells(4, 2), Cells(last_row, last_col))
Gracias
De esta forma es más sencillo?
EliminarPero me da error 5
ActiveSheet.ListObjects.Add(Range("A8").End(xlDown).Offset(1, 0), , xlYes).Name = _
"Tabla1"
Hola, quisiera saber cómo acceder a un valor x dentro de una tabla
ResponderEliminarAlgo similar a esto:
Buscar(D6;"tblSource[cod]";"tblSource[serial])
Gracias..
Hola, si tengo el caso 5, de seleccionar una columna, no se podrían añadir más columnas, o sea que, ¿además de la tercera también sea la cuarta y al quinta?
ResponderEliminarPodría ser algo así:
EliminarSub pruebas()
Dim tres As Range
Dim cuatro As Range
Set tres = ActiveSheet.ListObjects("Tabla1").ListColumns(3).DataBodyRange
Set cuatro = ActiveSheet.ListObjects("Tabla1").ListColumns(4).DataBodyRange
Range(tres, cuatro).Select
End Sub
Saludos.
¿Como se seleccionarian un rango entre dos columnas y una fila concreta, indicando las columnas por el nombre de las mismas(no por su número de orden).
ResponderEliminarHola José Manuel
EliminarNo entiendo tu pregunta. Por ejemplo, no se qué significa esta parte:
"...entre dos columnas y una fila concreta..."
Se trata de seleccionar un rango en una fila concreta, que abarque varias celdas, pero en lugar de seleccionarlas con BodyRange me gustaria seleccionarlas haciendo referencia a los nombres de las columnas.
EliminarHola José maría.
EliminarDataBodyRange necesita un par de números, no referencias de columnas. Por lo tanto, yo abordaría el problema con otro tipo de referencias (no las propias de las tablas de Excel). Por ejemplo, algo así:
Range(hoja.cells(x,y),hoja.cells(x,y).Offset(x,y))
Saludos
Buenas, muchas gracias por la publicación, muy util.
ResponderEliminarUna consulta, quiero saber si es posible seleccionar un rango de una tabala filtrada.
Es decir, tengo una tabla con 600 valores, la filtro para que me muestre unicamente los 100 valores que cumplen las condiciones que necesito y quiero seleccionar unicamente las 10 primeras celdas que me muestran. Similar a lo que describen en el caso 5 pero no tengo conocimiento de la posición exacta en que se van a encontrar las celdas despues de aplicar el filtro.
Hola Ángel
ResponderEliminarLo que necesitas (salvo que yo haya entendido mal) deberías hacerlo con filtros avanzados. A tal efecto podrías grabar una macro y de ahí sacas el código. Recuerda que los filtros avanzados están en la ficha Datos, junto al comando Ordenar.
Saludos.
Buenos días, @José Manuel Pomares Medrano
ResponderEliminarun blog excelente, muy bien ordenado y de cara al grano.
Felicidades!
Hola! ¿Es posible saber si la celda actual seleccionada en una hoja forma parte de una tabla?
ResponderEliminarHola.
EliminarQue yo sepa, no.
En cualquier caso, es algo que el programador conoce, puesto que puede tener una lista de todos los rango utilizados por sus tablas desde la ficha Fórmulas / Administrador de nombres.
Saludos.
Hola Luis
EliminarSe me acaba de ocurrir que quizá así:
If Not Intersect(ActiveCell, [nombreTabla]) Is Nothing Then MsgBox "Es tabla"
Saludos.
Hola, buenas tardes, ante todo gracias por compartir sus conocimientos y he apredndido muchisimo con el articulo y las respuestas que le siguen.
ResponderEliminarMi pregunta va referida a:
He programado una macro para usar en cualquier hoja de cualquier libro, cuando esta comienza me selecciona todos los datos que existen y me crea rangos nombrados, con los cuales trabajao posteririormente. Comparto
Private Sub UserForm_Initialize()
Dim Seleccion As Range
Range("B3").Select
If ActiveCell.CurrentRegion.Columns.Count > 1 Then 'para cdo esta activada una celda con datos
Set Seleccion = Application.ActiveCell
Seleccion.Select
Else 'para cdo esta activada una celda sin datos
Set Seleccion = Application.InputBox("Posicione el cursor sobre una celda con datos de la tabla", "ATENCION", Type:=8)
Seleccion.Select 'me ubico en una celda con valor
End If
Selection.CurrentRegion.Select 'selecciono toda la tabla con CTRL+*
'creo los Names en formulas-nombres definidos-crear desde la secion
Selection.CreateNames Top:=True, Left:=False, Bottom:=False, Right:= _
False
With Me.ComboBox1
ComboBox1.List = Array("-Ninguno-", "Espacio", "Dos puntos", "Coma", "Punto y coma", "Signo de igualdad", "Caracter de tabulación")
.ListIndex = 0
End With
RefEdit1.SetFocus
End Sub
Me preocupa que la tabla existente en la hoja ya tenga nombres creados
1. ¿Cómo puedeo saber si la tabla con que trabajare ya tiene nombres creados, de ser asi, entonces utilizarlos?
2. o ¿Cómo puedo hacer esto y al final devolver a la tabla su conformacion origunal?
Hola Katia
EliminarPuedes eliminar todos los nombres mediante:
For Each nombre In Application.Names
nombre.Delete
Next
También puedes comprobar la cantidad de nombres que tienes mediante:
Names.Count
Saludos.
Hola que buen artículo, pero tengo una duda, como puedo cargar los títulos de una tabla en un listbox de manera vertical, lo he logrado contando las celdas desde la celda donde empiezan la tabla, pero hasta ahora lo hago contando las celdas a nivel hoja y NO a nivel tabla, como podría hacer eso contando los encabezados?!! Muchas Gracias...
ResponderEliminarHola Marius
EliminarPuedes contar los encabezados mediante:
ActiveSheet.ListObjects("Tabla1").HeaderRowRange.Count
Saludos.
Te lo agradezco mucho... estaba seguro que te había contestado, tal vez olvide darle a publicar....
EliminarBuenos días. Se puede llenar un ListBox con la propiedad RowSource pero que seleccione para ese listado los que cumplan con una condición?
ResponderEliminarHola excelente aportación.
ResponderEliminaren mi caso tengo una cuestión; deseo mediante vba copiar una columna o varias dentro del rango del encabezado de una tabla, mediante su nombre,y pegarla en otra celda; hoja o libro. es decir, tengo un rango de información de aprox 32 columnas, y solo necesito la información de 5 unicamente; por lo cual, requiero seleccionarlas, copiar y pegarlas. gracias de antemano
ah, complementando, la necesidad de hacerlo de esta forma con vba, es que los archivos con la información, tienen variaciones de columnas, en relación de +/-3 a 5, por ello la necesidad de crear la extracción en relación al nombre de la columna seleccionado o buscado dentro del currentregion gracias
ResponderEliminarya listo, la opcion era bien sencilla, utlizando la condicion if y la funcion countif, y el listobjects("").listcolumn("")... todo solucionado
EliminarBuen día. ¿que estoy haciendo mal? me da error en la ultima fila. Busco eliminar la fila de la tabla donde se encuentra un determinado dato.Gracias.
ResponderEliminarSub eliminartarea()
Dim valorbuscado As Variant
Dim filatabla As Variant
valorbuscado = Hoja1.Range("C3").Value
filatabla = Application.WorksheetFunction.Match(valorbuscado, Hoja4.ListObjects("BDTAREAS").ListColumns(1).DataBodyRange, 0)
Hoja4.ListObjects("BDTAREAS").ListRows.Range.Delete
Imagino que deberías pasar a ListRows el número de fila a eliminar:ListRows(filatabla)........
EliminarSaludos
Hola, estoy automatizando una tarea de clientes y llevo tres días mirando si puedo sustituir con una variable la llamada a tablas de una hoja, si podéis indicarme si hay código, o es inviable, muchas gracias
ResponderEliminarDim TablaNombre As String
Set TablaNombre = Range("E14")
ActiveSheet.ListObjects(TablaNombre).ListColumns(1).DataBodyRange.Select
El código me pide objeto, y al poner objeto me sigue dando error \O/
Hola Roberto.
EliminarEstas declarando una variable como texto y después intentas asignarle un objeto. Eso no es posible.
Debes poner:
Dim TablaNombre as Range
Saludos.
hola, otra cuestion deseo realizar suma condicioanl de valores de una tabla de datos, pero me arroja el error subindice fuera de intervalo, y si realizo alguna modificacion en listcolumns, me da el error ocasinado por la applicacion o por el objeto.
ResponderEliminar.Cells(i, 3) = Application.WorksheetFunction.SumIf(Hoja6.ListObjects("Nominas").ListColumns("Sucursal").Range, .Cells(i, 2), Hoja6.ListObjects("Sueldo").Range)
gracias de antemano por su comentaio.saludos
ja ja ja, ya quedo gracias de todos modos, la linea estaba incompleta!!!
ResponderEliminarasi es correcta: .Cells(i, 8) = Application.WorksheetFunction.SumIf(Hoja6.ListObjects("Nominas").ListColumns("Sucursal").Range, .Cells(i, 2), Hoja6.ListObjects("nominas").ListColumns("sueldo").Range);
asi es correctamente el argumento vales
Hoja6.ListObjects("nominas").ListColumns("sueldo").Range
y asi se habia escrito:
Hoja6.ListObjects("nominas").ListColumns("sueldo").Range
Saludos y gracias por sus aportes
Saludos, genial la explicación y los aportes, pero tengo el problema que al ingresar datos en una tabla, a esa fila ingresada la configura como fila de totales y las siguientes filas las considera fuera de esa tabla. Entonces mi pregunta es: como dejar establecido que la fila de totales está desactivada? con ese cambio, incorporaría los nuevos datos dentro de la tabla?
ResponderEliminarGracias por el apoyo
Hola Dinorah.
EliminarSe hace de la misma forma en la que activaste la fila de totales: desde la ficha conextual de la tabla de Excel (Ficha Diseño o Diseño de tabla). Ahí podrás ver una casilla de verificación con el título "Fila de totales".... desactiva esa casilla.
Saludos.
Buenas tardes, quisiera saber si me podrían ayudar con una forma para encontrar el numero de columna con el nombre del encabezado de la tabla y colocarlo en una variable por favor, muchas gracias de antemano.
ResponderEliminarNo creo que hay forma de hacer eso
EliminarTODAS LAS SOLUCIONES SI EXISTEN, PERO NO LAS ENCONTRAMOS LUEGO LUEGO, PERO LAS OPCIONES MAS PRONTAS SON EL USO DE LA FUNCION MATCH (application.worksheetfunction.match( , , )... y su anidación correcta dentro de tu programación, recuerda utilizar set para asignar el rango a tu variable
EliminarHola, excelente aporte, muchas gracias....
ResponderEliminarTengo una consulta:
Tengo una tabla con datos y una de las columnas es la fecha de caducidad, habrá alguna forma de comparar la fecha de caducidad con la fecha actual, y si la fecha de caducidad es anterior a la fecha actual poner la fila de la tabla en rojo.
Gracias de antemano.
Buenas noches.
EliminarSí, es posible.
No tiene relación con el tema de este artículo, pero lo puedes hacer con reglas de formato condicional.
Saludos.
Sub EliminarPrestamo()
ResponderEliminarDim Codigo As String
Dim Resp As Byte
Dim HojaDatos As Worksheet
Dim Tabla As ListObject
Dim ValorEncontrado As Range
Set HojaDatos = ThisWorkbook.Sheets("Cuotas")
Set Tabla = HojaDatos.ListObjects("T_Cuotas")
Codigo = InputBox("Ingrese el código", "Eliminar Préstamo")
If Codigo <> Empty Then
Resp = MsgBox("Desea eliminar el préstamo?", vbQuestion + vbYesNo, "Eliminar Préstamo")
If Resp = vbYes Then
Do
Set ValorEncontrado = Tabla.DataBodyRange.Columns(1).Find(Codigo, LookAt:=xlWhole)
If Not ValorEncontrado Is Nothing Then
Tabla.ListRows(ValorEncontrado.Row - 6).Delete
Else
MsgBox "Valor no encontrado", vbInformation, "Eliminar Préstamo"
End If
Loop While Not ValorEncontrado Is Nothing
End If
End If
End Sub
Saludos, este código lo utilizo para eliminar filas de una tabla de excel que cumplen con una condición de tener el mismo ID, sin embargo, me esta fallando cuando intento borrar el último registro o mejor dicho, cuando la tabla se queda sin registros, qué me falta para evitar que salga ese error.
Si solo es evitar que te salga el error, puedes agregar al principio On Error Resume Next
EliminarPero esto es siempre que la macro funcione perfectamente ya y siempre que el error se produzca al final.
Saludos.
Intenté con eso pero no funciona o al menos no sé dónde colocarlo
EliminarPonlo, por ejemplo, justo antes de las declaraciones dim de las variables.
EliminarConocerás una manera de saber si la tabla está vacía, sin registros
EliminarSi una tabla está vacía, en su primera fila no habrá nada, luego:
EliminarIF [A2] = "" then ....
Saludos.
Buenas tardes, muy buen aporte.
ResponderEliminarTengo una consulta Urgente por favor, quisiera saber si me podrían ayudar con una forma para encontrar el numero de columna con el nombre que tiene el encabezado en esa posición de la tabla y colocarlo en una variable, es decir:
Codigo nombre apellido dirección
Si yo coloco "apellido" , me devuelva en número de la columna en la tabla (no en la hoja de excel completa), es decir en este caso el Número: 3.
Muchas gracias de antemano por la ayuda.
BUENO A MI ME HA FUNCIONADO LA FUNCION MATCH, CON ELLO SE CREA EL INDICE EN FUNCIÓN AL NOMBRE DE COLUMNA, Y EL RANGO DE BUSQUEDA, EL CUAL PUEDE IR INSERTADO EN LA FUNCION VLOOKUP O INDEX POR CITAR DOS EJEMPLOS DE CONSULTA,
EliminarHola a todos!!!! Estoy con un problema, veo que siempre las sentencias para la selección de alguna parte de la tabla con "activesheet", es decir, la hoja activa. Como podría extraer los datos en otra hoja.
ResponderEliminarEspero q me puedan ayudar. Saludos
Hola. Gracias por tus contenidos. Estoy como loca buscando una macro que me permita crear un indice automático de columnas de una tabla, o un índice donde se me haga un listado con hipervinculos que me lleve a la primera celda en una tabla (sea que la tabla esté como tabla o como rango). Yo descargo bases de datos que tienen muchas columnas (que no están en formato tabla) y de manera manual me toca ir a la variable que necesito. Quisiera un índice para ir directo a la variable que necesito. GRACIAS!!
ResponderEliminarNo tengo artículos con ese código, pero puedes encontrar la respuesta aquí, creo: https://bit.ly/3AFi6QY
EliminarSaludos
Hola que tal, estoy intentando crear una lista desplegable con un COMBOBOX a partir de los encabezados de una tabla de Excel. Mi inquietud es; como puedo hacer para que en el COMBOBOX no se carguen todos los encabezados de la tabla, solo deseo algunos cuantos. Ya que con el código que estoy empleando me carga TODOS los encabezados y no quiero eso.
EliminarEstoy usando este codigo:
Hoja4.CBX_Lista.List = Application.Transpose(TablaControl.HeaderRowRange.Value)
Ya intente especificar el o los encabezados dentro de HeaderRowRange pero me indica un error.
¿Como puedo especificar dentro del codigo los encebezados que yo deseo que aparezcan en la lista del combobox?
Excelente dia; mi situacion ahora es, como trabajo con tablas, cuya información se obtiene de archivos xml cuya variacion de columnas es muy notoria, siendo el caso de que las columnas fuentes nunca faltan, sino que cambian de numero de posición en razón a los datos que algunos proveedores agregan o no agregan a sus xml. entonces la cuestion, para leer los datos con el for next (i,numero columna), utilizo la función match para obtener el numero de acuerdo al nombre de la columna, el problemas radica, en que al obtener datos de otra xml, ya no me reconoce la aplication match y me dice el error no coinciden tipos, mucho le agradecería la aportación necesaria.
ResponderEliminarHola que tal, estoy intentando crear una lista desplegable con un COMBOBOX a partir de los encabezados de una tabla de Excel. Mi inquietud es; como puedo hacer para que en el COMBOBOX no se carguen todos los encabezados de la tabla, solo deseo algunos cuantos. Ya que con el código que estoy empleando me carga TODOS los encabezados y no quiero eso.
ResponderEliminarEstoy usando este codigo:
Hoja4.CBX_Lista.List=Application.Transpose(TablaControl.HeaderRowRange.Value)
Ya intente especificar el o los encabezados dentro de HeaderRowRange pero me indica un error.
¿Como puedo especificar dentro del codigo los encebezados que yo deseo que aparezcan en la lista del combobox?
En toda tabla dinámica al hacer doble clic depliega el detalle. Pero yo lo que quiero es lo siguiente.
ResponderEliminaren una celda escribir un valor x que es como un buscarv o coincidir a un valor de la tabla dinámica, pero al ladro habrá un botón que dará doble clic a la tabla dinámica de acuerdo al valor ingresado
Hola a todos:
ResponderEliminarNecesito seleccionar un encabezado concreto, pero la siguiente instrucción no selecciona nada, y no sé por qué:
ActiveSheet.ListObjects(Tabla).HeaderRowRange("PROVINCIA").Select
Agradecería su ayuda. Saludos
Hola, una solución para eliminar todas las filas de la comuna, excepto la primera.
ResponderEliminarBuenos dias, antes que nada les comparto que no tengo nada de experiencia con VBA, pero me estaba preguntando si hay alguna forma de hacer que una tabla tenga columnas dinamicas, esto es, tengo una tabla1 origen con dos columnas, quiero que esta alimente una tabla2, y que al agregarle filas a la tabla1, los datos de la columna B se conviertan en los nombres de columna de la tabla2. Espero haberme explicado.
ResponderEliminarSaludos y felicidades por tu blog
ResponderEliminarUna solución para eliminar última fila de la tabla, que va ingresando datos a través de un formulario
Gracias
Hola, como sería el codigo si solo quiero eliminar los datos de la fila de una tabla en especifico, debido a que tengo otro cuadro más a la derecha.
ResponderEliminarHola, espero que esten bien y me puedan ayudar, actualmente tengo un libro de excel libro1 donde tengo una tabla "tDeptos_1" en la hoja "Catalogo" donde por medio de un combobox me carga los departamentos de la tabla mediante el siguiente codigo: "Me.DEPTO.List = ThisWorkbook.Worksheets("Catalogo").ListObjects("tDeptos_1").ListColumns(2).DataBodyRange.Value" pero si la tabla "tDeptos_1" estubiera en otro libro de excel ej: libro2 como podria cambiar el codigo para que me los traiga desde al libro1, el codigo esta dentro de UserForm_Initialize. gracias por su ayuda. Saludos.
ResponderEliminar