** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Error al cargar ListBox con datos de otro
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoError al cargar ListBox con datos de otro

 Responder Responder
Autor
Mensaje
tigretones Ver desplegable
Nuevo
Nuevo


Unido: 08/Marzo/2010
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Tema: Error al cargar ListBox con datos de otro
    Enviado: 19/Mayo/2010 a las 19:35
Hola amigos. Soy nuevo manejando vba, y quisiera plantearos una consulta, supongo que bastante elemental.

Tengo un botón en una hoja, que al ser pulsado abre un formulario que sólo contiene un ListBox y un botón OK. Los datos que se cargan en el ListBox proceden de otro libro. Al pulsar el botón OK, el valor seleccionado en el ListBox se copia en la celda A1 de la hoja y se cierra el formulario. Eso es todo.

El código que he escrito es el siguiente:

    1. Código asociado al botón que abre el formulario:
Application.ScreenUpdating = False
Load UserForm1
Workbooks.Open Filename:="C:\MiRuta\Expedientes.xls"
ActiveWorkbook.Sheets(1).Range("A2").Activate
UltimaCelda = ActiveCell.SpecialCells(xlLastCell).Address
UserForm1.ListBox1.RowSource = ("A2:" & UltimaCelda)
Workbooks("Destino.xls").Activate   
Application.ScreenUpdating = True
UserForm1.Show

    2. Código asociado al botón OK que cierra el formulario
ActiveSheet.Range("A1").Value = ListBox1.Value
UserForm1.Hide
Workbooks("Expedientes.xls").Close SaveChanges:=False

La primera vez que se ejecuta, todo va como la seda y el valor (procedente de Expedientes.xls) que selecciono en el ListBox se me copia en la celda A1 de la hoja 1 de Destino.xls. Pero si a continuación vuelvo a pulsar el botón para repetir la operación, antes de que se abra el formulario Visual Basic me lanza el siguiente error:

"Se ha producido el siguiente error: '-2147024882 (8007000e)' en tiempo de ejecución:
No se puede configurar la propiedad RowSource. Espacio de almacenamiento insuficiente para completar esta operación"

¿Alguien puede decirme qué estoy haciendo mal?

Gracias por adelantado, y un saludo a todos.


Editado por tigretones - 19/Mayo/2010 a las 21:07
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 20/Mayo/2010 a las 00:04
prueba ver que pasa si comentas la linea

Load UserForm1

la segunda vez....
de entrada no veo ningun otro punto....
Arriba
tigretones Ver desplegable
Nuevo
Nuevo


Unido: 08/Marzo/2010
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 20/Mayo/2010 a las 10:36
He probado a anular la linea que comentas, Jordi-Albert,

Load UserForm1

pero el comportamiento es el mismo. En una primera ejecución, todo funciona correctamente, pero al repetir la operación salta el mensaje de error

"Se ha producido el siguiente error: '-2147024882 (8007000e)' en tiempo de ejecución:
No se puede configurar la propiedad RowSource. Espacio de almacenamiento insuficiente para completar esta operación"

, y el depurador de vba se detiene en la linea

UserForm1.ListBox1.RowSource = ("A2:" & UltimaCelda)

Parece que el problema está en la propiedad RowSource, pero no logro adivinar cuál es exactamente el error que cometo.

Gracias por la ayuda, Jordi-Albert
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5407
Enlace directo a este mensaje Enviado: 20/Mayo/2010 a las 11:42
En ese momento...
 
1.- ¿Que valor tiene "UltimaCelda"?
 (Lo puedes saber deteniendo el cursor sobre la variable)
 
2.- ¿Cual es el libro activo? (el real, no el que debería ser)
 
3.- ¿Cual es la hoja activa?
 
 
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
tigretones Ver desplegable
Nuevo
Nuevo


Unido: 08/Marzo/2010
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 20/Mayo/2010 a las 18:27

AnSanVal, en el momento de detenerse la ejecución,
  • el valor de "UltimaCelda" es $B$45 (no sabía que se podía averiguar su valor del modo que comentas, yo hubiera añadido una linea MsgBox UltimaCelda para averiguarlo; gracias por el consejo)
  • el libro activo es Expedientes.xls,
  • y la hoja activa es la "Hoja 1".
Pero ya no es necesario que le déis más vueltas, he encontrado la solución. La sugerencia de Jordi-Albert me ha abierto el camino, solo que en lugar de anular la instrucción Load UserForm1, se me ha ocurrido que tal vez lo que interese sea descargar el formulario una vez completada la primera ejecución, así que he probado a añadir la siguiente linea:

2. Código asociado al botón OK que cierra el formulario
ActiveSheet.Range("A1").Value = ListBox1.Value
UserForm1.Hide
Unload UserForm1
Workbooks("Expedientes.xls").Close SaveChanges:=False
Et voilà! Funciona, aunque no sé si es muy ortodoxo lo que estoy haciendo. Cualquier comentario al respecto será bienvenido. Si nadie quiere añadir nada más, los moderadores pueden cerrar el hilo cuando lo estimen oportuno.

Muchas gracias a todos por vuestra ayuda.


Editado por tigretones - 20/Mayo/2010 a las 18:28
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5407
Enlace directo a este mensaje Enviado: 20/Mayo/2010 a las 18:41
Me alegro. Wink
 
Lo más "ortodoxo" es aquello que funciona, sobre todo cuando es fruto de nuestro esfuerzo.
 
Yo tambien utilizaba UserForm1.Hide, aunque actualmente suelo usar con más frecuencia Unload UserForm1.
 
 


Editado por AnSanVal - 20/Mayo/2010 a las 18:41
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable