Eliminar filas desde un listbox con 8 columnas

Estoy realizando una pequeña aplicación para registrar las ventas de un restaurante mediante un formulario que cuenta con varios textbox, un listbox de 8 columnas y varios botones los cuales sirven para insertar los datos. Todo lo hace perfecto, el problema es que necesito que al seleccionar una fila del listbox me elimine esa fila y también lo elimine de la hoja de cálculo.
Lo que hace el programa es lo siguiente: primero agrega los datos de los 8 textbox a las 8 columnas desde la A hasta la H, aquí agrega todas las ventas de todos los días del año, después hace un filtro avanzado que selecciona las filas que coincidan con la fecha de hoy y las coloca desde la columna QUE hasta la columna R y después esta selección la muestra en el listbox usando la propiedad ROWSOURCE.
Ya he intentado buscando por varios días en la web para lograr eliminar las filas pero no he conseguido una respuesta que se adapte a mis necesidades, te dejo el último código que intenté para lograr hacerlo.
Dim valor, final As String
    Sheets("Ventas").Select
    valor = UserForm1. ListDts. Value 'El problema es aquí porque el listbox tiene varias columnas y no sé como hacer para que busque algún valor de toda la fila y luego lo busque en la hoja "Ventas" para luego eliminarlo y volver hacer el filtro con los nuevos datos coincidentes'
    Range("a1").Select
    ActiveCell.End(xlDown).Select
    final = ActiveCell.Address
    Range("h1", final).Select
    Selection.Find(what:=valor).Select
    If ActiveCell.Value = valor Then
        Selection.EntireRow.Delete
    End If
Espero haberme explicado bien y de antemano muchas gracias por tu tiempo

3 Respuestas

Respuesta
1
¿Puedes pasarme el libro a ver si puedo hacer algo?, mi email es [email protected]
Muchas gracias experto ya pude resolver mi problema, el código que utilicé fue el siguiente:
    Dim buscarcomanda, final As Integer
    buscarcomanda = ListDts.List(ListDts.ListIndex, 2)
    Sheets("Ventas").Select
    Range("a1:h1").Select
    ActiveCell.End(xlDown).Select
    final = ActiveCell.Address
    Range("a1", final).Select
    Cells.Find(what:=buscarcomanda).Select
    If ActiveCell.Value = buscarcomanda Then
        Selection.EntireRow.Delete
    End If
Agradezco muchísimo su interés y espero sirva para posibles consultas futuras
Respuesta
2
Bien analizando lo que me describiste, te consulto. Al referirte a "Al seleccionar una de las filas del Listbox", ¿haces mención a una de las opciones del mismo?. De ser así podrías hacer referencia al valor escogido mediante la listbox. value
Osea:
dato=cells.find(what:=listbox1.value,after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=True).Activate
Con esto buscas el valor escogido en listbox, luego te desplazas al principio de la fila la seleccionas y la borras por completo. Diferente a evaluar el valor con una sentencia if, ya que acá le dices que si lo encontró directamente lo active.
Lo probé y me funcionó, cualquier cosa me avizas, y no olvides finalizar y puntuar.
Que tal, muchísimas gracias por tu respuesta, pero que crees que lo probé y en mi caso no me funciona, lo que pasa es que tengo un listbox de varias columnas y el valor que me almacena en "dato" siempre es "verdadero". He probado con este código y me ha funcionado más o menos:
    buscarcomanda = ListDts.List(ListDts.ListIndex, 2)
    Sheets("Ventas").Select
    Range("a1:h1").Select
    ActiveCell.End(xlDown).Select
    final = ActiveCell.Address
    Range("a1", final).Select
    Selection.Find(what:=buscarcomanda).Select
    If ActiveCell.Value = buscarcomanda Then
        Selection.EntireRow.Delete
    End If
bueno hasta ahora me funciona más o menos esto pero ahora mi pregunta es como hago para que cuando sea la última celda que borre no me de error???
Perdón, la culpa es mía.
La forma correcta de hacer que puedas analizar el valor de dato sería tranformarlo en un objeto así:
set dato=cells.find(what:=listbox1.value)
if not dato is nothing then                'Osea si el objeto dato No está vacio(Encontró valor)'
Range (dato. Address). Activate
Resto del código de selección y borrado de fila
else
msgbox"No se hallo lo opción elegida"
end if
Por otro lado en tu código, veo que vuelves a evaluar la búsqueda ya que si la sentencia Find encuentra el valor se posiciona sobre la celda, y no haría falta volver a evaluarla. Desde la celda donde encontró el dato restaría seleccionar toda la fila y después borrarla. Ah y un error común por el cual puede no funcionar es la linea "selection.find" en ves de "cells.find"
Prueba y me avizas.
Respuesta
-1
Si hablas de Excel, prueba a realizasr esas operaciones en ETL, con el Integration services. Se trata de programar paquetes que realizan esas tareas en un flujo de trabajo que lleva a Excel como destino.
Siendo así, baja a SQL las intenciones del modelo de proceso de negocio para que la programación no sea un obstacúlo
Que tal experto, mi duda es la siguiente: Estoy realizando una pequeña aplicación para registrar las ventas de un restaurante mediante un formulario que cuenta con varios textbox, un listbox de 8 columnas y varios botones los cuales sirven para insertar los datos. Todo lo hace perfecto, el problema es que necesito que al seleccionar una fila del listbox me elimine esa fila y también lo elimine de la hoja de cálculo.
Lo que hace el programa es lo siguiente: primero agrega los datos de los 8 textbox a las 8 columnas desde la A hasta la H, aquí agrega todas las ventas de todos los días del año, después hace un filtro avanzado que selecciona las filas que coincidan con la fecha de hoy y las coloca desde la columna QUE hasta la columna R y después esta selección la muestra en el listbox usando la propiedad ROWSOURCE.
Ya he intentado buscando por varios días en la web para lograr eliminar las filas pero no he conseguido una respuesta que se adapte a mis necesidades, te dejo el último código que intenté para lograr hacerlo.
Dim valor, final As String
    Sheets("Ventas").Select
    valor = UserForm1.ListDts. Value 'El problema es aquí porque el listbox tiene varias columnas y no sé como hacer para que busque algún valor de toda la fila y luego lo busque en la hoja "Ventas" para luego eliminarlo y volver hacer el filtro con los nuevos datos coincidentes'
    Range("a1").Select
    ActiveCell.End(xlDown).Select
    final = ActiveCell.Address
    Range("h1", final).Select
    Selection.Find(what:=valor).Select
    If ActiveCell.Value = valor Then
        Selection.EntireRow.Delete
    End If
Espero haberme explicado bien y de antemano muchas gracias por tu tiempo
Que tal experto, disculpa mi ignorancia pero la verdad es que entendí muy poco de tu respuesta, no sé que es ETL y tampoco sé manejar SQL, el problema es que ya llevo mi aplicación muy avanzada y sería muy complicado volver a empezarla, bueno, volviendo a mi pregunta inicial y pondré un poco más fácil.
Necesito conocer el valor de una columna específica en un listbox para luego realizar una búsqueda con dicho valor y luego eliminarlo, sé hacer lo de la búsqueda y lo de eliminar la fila, pero no sé encontrar el valor ya que la propiedad value me da error porque son 8 columnas del listbox
Muchas gracias por tu respuesta de cualquier forma, pero si pudieras aclararme sería grandioso
Perdona lo de SQL. Entendí que trabajas con BBDD. Olvidalo.
Las funciones de búsqueda o de texto en Excel te permite buscar cualquier dato que cumpla tus condiciones. Mira como incorporar al desarrollo las llamadas a las funciones de Excel para buscar la columna concreta. Las búsquedas como funciones son las más poderosas para buscar una columna concreta dentro de un rango para sólo recoger el dato poblado.
Eso puede ser, a su vez, la condición de la siguiente búsqueda en Ventas
Una vez localizados los valores, se pueden excluir del filtro.
Hola de nuevo, bueno lo que pasa es que yo estoy trabajando con macros y no con funciones de excel... quiero decir que estoy usando formularios en excel para que me hagan lo que necesito, pero muchas gracias por tus respuestas aunque no me han ayudado mucho, pero agradezco el tiempo que te has tomado en responder.
Finalizaré la pregunta y preguntaré a otro experto, muchas gracias de nuevo.
Pero en los formulario excel puedes llamar a las funciones de Excel para hacer lo que te digo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas