Modificar o Eliminar datos de un listbox

Julio:on
Dentro de un userform, tengo varios textbox(donde se cargan datos)y varios commandbuton.
El comandbutton1, al presionarlo, los datos cargados en los textbox van a la hoja 1 del libro.
El comandbutton2, al presionarlo, muestro la hoja 1, con los datos cargados, para que el usuario pueda modificarlos, o eliminar algún registro (desde la hoja1)
El commandbutton3, y muestra los datos de la hoja1 pero a través de un listbox
La pregunta es:
Los datos que muestro en el listbox, ¿se pueden modificar o eliminar desde el mismo listbox?

1 Respuesta

Respuesta
3
No, se debe hacer desde un combobox el listbox no es editable desde el propio listbox.
>Un saludo
>Julio
Julio:
No entendí, lo del combobox, ya que no tengo ninguno, pero entiendo que los listbox no son editables, por consiguiente, si selecciono un registro o varios de los que contiene el listbox, puedo eliminarlos, ¿presinando un commandbuton? ¿Y cuál seria la rutina del mismo?
Desde ya gracias
Eso si puedes hacerlo pero quedaría el espacio en blanco en tu lista, por ejemplo si cargas el Listbox con el rango A1:A6 y seleccionas un valor de la lista por ejemplo A3 el código en el botón sería:
Private Sub CommandButton1_Click()
Dim valor As String
On Error Resume Next
valor=Listbox.1.Value
Range("A1:A6").Select
Selection.Find(what:=valor).Activate
If ActiveCell.Value=valor Then
ActiveCell.Empty
'Aquí la linea para definir el rango
End If
End Sub
Pero en este caso la celda A3 se quedaría en blanco y cuando desplegaras el Listbox verías un hueco salvo que eliminaras la fila (Selection.EntireRow.Delete) en vez el valor de la celda (linea en negrita)y volvieses a definir el rango del Listbox para que una vez eliminada la fila el rango que cargará el Listbox fuese A1:A5 para evitar el espacio al final de la lista. (Listbox1.ListFillRange="A1:A5")
Si necesitas alguna aclaración me lo dices.
>Un saludo
>Julio
Julio:
No puedo hacer que funcione, en la linea 'Aquí la linea para definir el rango, coloco Selection.EntireRow.Delete, pero me elimina todo el rango, en lugar de eliminar el valor seleccionado en el listbox.
Perdón por la ignorancia.
Es que no es ahí lee bien la contestación te he dicho:
Pero en este caso la celda A3 se quedaría en blanco y cuando desplegaras el Listbox verías un hueco salvo que eliminaras la fila (Selection. EntireRow. Delete) en vez el valor de la celda (linea en negrita)
Con esto quería que cambiaras la linea en negrita:
ActiveCell. Empty
Por
Selection.EntireRow.Delete
Y para cambiar el rango del listbox cuando hayas eliminado la fila tenias que poner en la linea Aquí la linea para definir el rango:
Listbox1. ListFillRange="A1:A5" 'cambiando el rango a tu necesidad.
A ver si ahora me has entendido.
>Un saludo
>Julio
Julio:
Entendí, lo que me explicaste, pero la macro sigue sin funcionar del todo, ya que en el momento de: Range("a1:a6").Select, se selecciona todo el rango, y al momento del:Selection.EntireRow. Delete se elimina todo el rango, en lugar de eliminarse el registro seleccionado.
Gracias, un abrazo
Bien te pongo toda la macro porque no estas poniendo las lineas de código en su lugar correcto:
Esta macro te elimina el valor de la celda, buscando el valor en el rango A1:A6
Private Sub CommandButton1_Click()
Dim valor As String
On Error Resume Next
valor=Listbox1.Value
Range("A1:A6").Select
Selection.Find(what:=valor).Activate
If ActiveCell.Value=valor Then
ActiveCell.Empty
End If
End Sub
Si queremos eliminar la fila quedaría así:
Private Sub CommandButton1_Click()
Dim valor As String
On Error Resume Next
valor=Listbox1.Value
Range("A1:A6").Select
Selection.Find(what:=valor).Activate
If ActiveCell.Value=valor Then
Selection.EntireRow.Delete
End If
End Sub
Como ahora al eliminar la fila te quedaría un hueco en la lista del Listbox tenemos que modificar el rango con el que cargamos el Listbox y entonces quedaría así:
Private Sub CommandButton1_Click()
Dim valor As String
On Error Resume Next
valor=Listbox.1.Value
Range("A1:A6").Select
Selection.Find(what:=valor).Activate
If ActiveCell.Value=valor Then
Selection.EntireRow.Delete
Listbox1.ListFillRange="A1:A5"
End If
End Sub
Y ya lo ultimo si quieres cargar el Listbox en automático independiente de los datos que pongas en tu lista, suponemos que vas escribiendo valores en la columna A y que cuando te parezca, aumentas los valores, entonces primero cargamos el Listbox en automático y después eliges un valor de él para eliminarlo, para ello debemos de poner 2 botones uno de carga y otro para elegir valor en el Listbox y eliminar la fila:

-Boton de carga del Listbox

Private Sub CommandButton1_Click()
Dim final As String
Range("A1").Select
ActiveCell.End(xlDown).Select
final = ActiveCell.Address
ListBox1.ListFillRange = "A1:" & final & ""
End Sub
-Boton de buscar y eliminar fila
Private Sub CommandButton2_Click()
Dim valor, final As String
valor = ActiveSheet.ListBox1
Range("A1").Select
ActiveCell.End(xlDown).Select
final = ActiveCell.Address
Range("A1", final).Select
Selection.Find(what:=valor).Select
If ActiveCell.Value = valor Then
Selection.EntireRow.Delete
End If
End Sub
Espero que ahora ya no te queden dudas, puntúa y finaliza la consulta. Gracias.
>Un saludo
>Julio
Julio:
Después de renegar todo el día, pude hacer funcionar la ultima macro.
Busque en la web, por que no funcionaba, y tuve que cambiar una lineas que te describo, para puedas ayudar a otro novato cuando te consulten sobre lo mismo
la linea: valor = ActiveSheet.ListBox1
por : valor = ListBox1.Value
y
la linea: Selection.Find(what:=valor).Select
por : Cells.Find(what:=valor).Select
asi funciona barbaro
Gracias por todo, hasta la próxima

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas