Guardar y modificar datos en ListBox de UserForm
Resuelto
trevsiob
Mensajes publicados
11
Fecha de registro
Estado
Miembro
Última intervención
-
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
Hola,
tengo un UserForm con 4 ListBox. Los usuarios deben seleccionar ítems en el primer ListBox, presionar un botón "ADD" y el ítem se transfiere al segundo ListBox. También pueden seleccionar un ítem que ha sido previamente enviado al ListBox 2 y presionar un botón "REMOVE" para quitar el ítem (por ejemplo, en caso de error). Deben hacer lo mismo con el tercer ListBox, que contiene una lista diferente de ítems, y al seleccionarlos se transfieren al cuarto ListBox bajo el mismo principio descrito anteriormente. Finalmente, deben presionar un botón "TERMINAR" que cierra el UserForm y transfiere la selección en dos ListBox diferentes en la hoja de Excel. En esta última, hay un botón "MODIFICAR" que permite a los usuarios volver a abrir el UserForm, que aparece con la selección anterior y pueden modificar su trabajo. Todo este procedimiento funciona bien, pero tengo dos problemas. Primero, me gustaría poder guardar los datos de los ListBox de la hoja de Excel al cerrar el archivo. Para ello, utilizo un "rango" de celdas en el que se transfiere el contenido de los dos ListBox y he escrito un código en WorkBook_Open que ve en el rango y lo usa para devolver los ítems a los ListBox, pero no puedo modificar la selección cuando los ítems provienen del "rango". En segundo lugar, me gustaría que los usuarios no pudieran elegir el mismo ítem dos veces en el UserForm. Debería ser que cuando un ítem se transfiere mediante el botón "ADD", ese mismo ítem se elimine o sea invisible o deshabilitado en el primer ListBox y cuando se presione el botón "REMOVE", el ítem regrese al primer ListBox.
¡Espero haber sido lo suficientemente claro!
Muchas gracias
Alex
tengo un UserForm con 4 ListBox. Los usuarios deben seleccionar ítems en el primer ListBox, presionar un botón "ADD" y el ítem se transfiere al segundo ListBox. También pueden seleccionar un ítem que ha sido previamente enviado al ListBox 2 y presionar un botón "REMOVE" para quitar el ítem (por ejemplo, en caso de error). Deben hacer lo mismo con el tercer ListBox, que contiene una lista diferente de ítems, y al seleccionarlos se transfieren al cuarto ListBox bajo el mismo principio descrito anteriormente. Finalmente, deben presionar un botón "TERMINAR" que cierra el UserForm y transfiere la selección en dos ListBox diferentes en la hoja de Excel. En esta última, hay un botón "MODIFICAR" que permite a los usuarios volver a abrir el UserForm, que aparece con la selección anterior y pueden modificar su trabajo. Todo este procedimiento funciona bien, pero tengo dos problemas. Primero, me gustaría poder guardar los datos de los ListBox de la hoja de Excel al cerrar el archivo. Para ello, utilizo un "rango" de celdas en el que se transfiere el contenido de los dos ListBox y he escrito un código en WorkBook_Open que ve en el rango y lo usa para devolver los ítems a los ListBox, pero no puedo modificar la selección cuando los ítems provienen del "rango". En segundo lugar, me gustaría que los usuarios no pudieran elegir el mismo ítem dos veces en el UserForm. Debería ser que cuando un ítem se transfiere mediante el botón "ADD", ese mismo ítem se elimine o sea invisible o deshabilitado en el primer ListBox y cuando se presione el botón "REMOVE", el ítem regrese al primer ListBox.
¡Espero haber sido lo suficientemente claro!
Muchas gracias
Alex
4 respuestas
-
Aquí tienes el enlace de la primera publicación:
http://www.webtransfer.ch/en/download/681f638314d6f969a10b6194ea81ea4238ea1d80 -
Hola,
Para la segunda pregunta, aquí está mi respuesta en código:
'pasar de ListBox1 a ListBox2
Private Sub cmdadd_Click()
Dim counter As Integer
counter = -1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ListBox2.AddItem ListBox1.List(i)
counter = i
End If
Next i
If counter <> -1 Then ListBox1.RemoveItem (counter)
End Sub
'pasar de ListBox2 a ListBox1
Private Sub cmdremove_Click()
Dim counter As Integer
counter = -1
For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) Then
ListBox1.AddItem ListBox2.List(i)
counter = i
End If
Next i
If counter <> -1 Then ListBox2.RemoveItem (counter)
End Sub
Sin embargo, no entendí la primera pregunta...
Atentamente,
Franck -
pijaku,
Mi primera pregunta era:
Cuando el usuario ha terminado su trabajo, debe guardar el archivo de Excel. Pero cuando se vuelve a abrir el archivo guardado, Excel no guarda los datos de los listbox. Así que creé un "Rango" en el que se encuentra la selección para que los datos se guarden y tengo un código en WorkBook_Open que busca los datos del "Rango" y crea una población en el ListBox de la hoja de Excel. De esta manera no pierdo mis datos. El problema es que si quiero modificar la selección, ahí no funciona...-
Aquí tienes tu archivo de vuelta.
He hecho bastantes modificaciones.
Para la pregunta 1, modifiquen manualmente en sus dos Rango y hagan clic en el botón que he añadido.
Por otro lado, otras modificaciones:
- reemplazo de las propiedades RowSource de las listbox del userform por las propiedades list para permitir la eliminación,
- Selección múltiple de las listbox 1 y 3 del userform
y algunas tonterías a derecha e izquierda, sin importancia. -
-
-
-
-
Esta solución no me conviene realmente.
1. De hecho, todo este proceso formará parte de un formulario. La visualización debe ser óptima y los usuarios no podrán entrar en el rango para hacer una modificación manual.
2. El código para hacer desaparecer los elementos después de su selección contiene varios errores que quiero evitar. De hecho, al hacer la prueba, si seleccionamos varios elementos, no se eliminan todos. Además, al elegir la multiselección como lo han hecho, se vuelve menos interesante para los usuarios que seleccionarán solo un elemento y querrán cambiarlo antes de haber hecho clic en "AGREGAR".
Si tienen otras sugerencias que hacerme sobre las herramientas (cambiar ListBox por otra cosa, etc.), no duden.
Gracias