Cargar Listbox con rango dinámico
Tengo dos columnas (A y B) y quiero que en el evento initialize se cargue los datos de estas dos columnas al listbox.
1 Respuesta
Hay dos listbox para formulario y otro para hoja de excel, ambos cargan la información de un modo diferente ¿cuál es tu caso?
Para cargar datos a un formulario en un listbox desde un rango dinámico las instrucciones son: (solo cambia el b4 por la primera celda de tus datos)
Private Sub UserForm_Initialize()
Set datos = Range("b4").CurrentRegion 'carga rango dinamico pueder ser 1 o miles.
With ListBox1
.RowSource = datos.Address 'rango a cargar
.ColumnCount = 2 ' columnas a cargar de la hoja de excel
.ColumnHeads = False 'si las columnas no tienen encabezado
End With
End Sub
Hola
Tengo un formulario donde esta el Listbox
Los datos están en la hoja de excel (hoja1)
Quiero que al momento de cargar el formulario, automáticamente se muestre en el listbox aquellos datos que están en la hoja de excel (en las columnas A y B)
Nota: Los datos de lahoja de excel serán dinámicos.
Entonces usa la macro que te envíe si quitas o agregas datos cada que cargues el formulario la macro se adaptara a estos cambios.
Hola
En el caso que tome desde la celda A2 no me funciona, porque solo quiero que me cargue la info desde la fila 2 (A2)
Hola James
Se me complico un poco...
Te comento donde estoy introduciendo el código solicitado.
Tengo un UserForm1 donde tengo el Listbox1. Aquí quiero que aparezca los datos del rango que tengo en una hoja de excel (el rango puede crecer o decrecer a partir de la fila 2) mediante el evento Initialize
Tengo otro formulario; UserForm2, donde agrego dos datos ( un texbox para el nombre y otro texbox para el cargo) Al momento de pasar estos dos datos al Listbox1 del Userform1 me sale el error Acceso Denegado. Esto lo hago porque quiero que aparezca estos dos datos en el listbox y al mismo tiempo se guarde en las mismas columnas desde donde cargo al listbox con el evento Initialize.
¿Cómo puedo hacerlo? El código que puse en ambos al parecer funciona si el listbox esta en blanco, más no si tiene datos.
Tu ayuda!
Entonces si quieres cargar datos desde A2 (estoy suponiendo que tienes datos en a1) usa esta macro
Private Sub UserForm_Initialize()
Set datos = Range("a1").CurrentRegion 'carga rango dinamico pueder ser 1 o miles.
With ListBox1
Set datos = datos.Rows(2).Resize(datos.Rows.Count - 1, datos.Columns.Count) 'carga datos desde la fila 2
.RowSource = datos.Address 'rango a cargar
.ColumnCount = 2 ' columnas a cargar de la hoja de excel
.ColumnHeads = False 'si las columnas no tienen encabezado
End With
End Sub
Para darme una idea de lo que necesitas, ¿puedes poner una pantalla de ambos formularios y la hoja de Excel?, el acceso denegado se te porque primero tienes que cargar los datos en la hoja y luego llamar las instrucciones de la macroque te pase, la instrucción .rowsource=impide que cargues datos directamente al listbox, enviame los datos y en el transcurso del día te respondo.
Vamos por partes primero:
En el formulario 2 copias este código, al presionar el botón guardar la macro colocara los datos una fila después de la ultima fila de datos, capturas todos los renglones que ocupes y en cuanto cierres el formulario o des click en un botón de salida, la macro mandara llamar un programa que se llama carga_datos y te actualizara en automático el listbox del formulario1
Private Sub CommandButton1_Click()
Set datos = Range("a1").CurrentRegion
With datos
.Cells(.Rows.Count + 1, 1) = TextBox1.Text
.Cells(.Rows.Count + 1, 2) = TextBox2.Text
End With
End Sub
Private Sub CommandButton2_Click()
UserForm1.carga_datos
UserForm2.Hide
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Terminate()
UserForm1.carga_datos
End Sub
en el formulario 1 pega el siguiente codigo
Private Sub CommandButton1_Click()
UserForm2.Show
End Sub
Private Sub UserForm_Activate()
End Sub
Private Sub UserForm_Initialize()
carga_datos
End Sub
Sub carga_datos()
Set datos = Range("a1").CurrentRegion
With datos
Set datos = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
With ListBox1
.RowSource = datos.Address
.ColumnCount = 2
.ColumnHeads = True 'si no quieres lo titulos dentro del listbox ponle false
End With
End With
End Sub
Prueba y comentas.
- Compartir respuesta