VBA Agregar elemento ListBox
Resuelto
Julistage
Mensajes publicados
31
Estado
Miembro
-
Julistage Mensajes publicados 31 Estado Miembro -
Julistage Mensajes publicados 31 Estado Miembro -
Hola,
Estoy trabajando en un userform. Tengo en una pestaña: 2 listbox que se enfrentan, cuando selecciono un elemento de cada uno y hago clic en "Validar", ambos elementos se envían a Excel en una tabla de 3 columnas. Enlazo la segunda columna a la tercera mediante una fórmula de Excel (para obtener un código):
=INDIRECTO(DIRECCION(EQUIV("")))
Luego, la información que recupero se envía a un tercer ListBox de múltiples columnas (3 para ser exactos). Mi función funciona muy bien:
Sin embargo, el problema que encuentro es el siguiente: Mi macro solo funciona para un solo elemento. Cuando hago clic para agregar otro elemento en mi ListBox Multicolumna, reemplaza el elemento anterior.
A partir de ahí, no sé cómo proceder. ¿Cómo puedo llenar mi tabla de Excel cada vez que hago clic en Validar, sin eliminar el elemento anterior? (de manera que llene mi LB Multicolumna como deseo)
No sé cómo abordar el bucle. ¿Tendría algún consejo, por favor?
Gracias de antemano :).
Julie
Configuración: Windows XP / Internet Explorer 6.0
Estoy trabajando en un userform. Tengo en una pestaña: 2 listbox que se enfrentan, cuando selecciono un elemento de cada uno y hago clic en "Validar", ambos elementos se envían a Excel en una tabla de 3 columnas. Enlazo la segunda columna a la tercera mediante una fórmula de Excel (para obtener un código):
=INDIRECTO(DIRECCION(EQUIV("")))
Luego, la información que recupero se envía a un tercer ListBox de múltiples columnas (3 para ser exactos). Mi función funciona muy bien:
Range("AB2") = ListBox15.Value Range("AC2") = ListBox16.Value Me.ListBox24.RowSource = "Sheet1!AB2:AD2" Sin embargo, el problema que encuentro es el siguiente: Mi macro solo funciona para un solo elemento. Cuando hago clic para agregar otro elemento en mi ListBox Multicolumna, reemplaza el elemento anterior.
A partir de ahí, no sé cómo proceder. ¿Cómo puedo llenar mi tabla de Excel cada vez que hago clic en Validar, sin eliminar el elemento anterior? (de manera que llene mi LB Multicolumna como deseo)
No sé cómo abordar el bucle. ¿Tendría algún consejo, por favor?
Gracias de antemano :).
Julie
Configuración: Windows XP / Internet Explorer 6.0
5 respuestas
Hola,
Tu listbox es estática si usas RowSource.
Para hacerla dinámica, debes hacer un bucle sobre tus columnas y usar AddItem:
Por ejemplo:
;o)
--
«Lo que se concibe bien se expresa con claridad, y las palabras para decirlo llegan fácilmente.»
Nicolas Boileau
Tu listbox es estática si usas RowSource.
Para hacerla dinámica, debes hacer un bucle sobre tus columnas y usar AddItem:
Por ejemplo:
Dim col As Long While Cells(1,col).Value <> "" Me.ListBox24.AddItem Cells(1,col) col = col + 1 Wend
;o)
--
«Lo que se concibe bien se expresa con claridad, y las palabras para decirlo llegan fácilmente.»
Nicolas Boileau
Hola,
Gracias por responder tan rápido :). No estoy muy familiarizada con VBA,
No conozco el bucle while....wend :x Estoy lidiando con mi libro de VBA Excel 2003 lol y solo encuentro
Do While.....Loop :x. Presumo que funciona de la misma manera.
Debo admitir que no sé cómo integrar tu fragmento de código.
Entiendo más o menos lo que significa (a priori ^^).
Llamo a ListBox objetivo mi ListBox24.
"Mientras la celda ...... contenga un valor, añade el elemento de la celda en el userform a la ListBox objetivo, luego pasa a la siguiente columna."
Me permito precisar por si acaso :x que mi problema reside en que al hacer clic en validar, quiero añadir un elemento a la siguiente fila en mi tabla de Excel. Por el momento, cuando hago clic en validar, se sobrescribe la selección anterior.
Cuando dices que mi LB objetivo es estática al usar RowSource, ¿significa que no puedo modificar mi ListBox objetivo? ¿que depende exclusivamente de mi tabla de Excel?
Gracias :)
pd: He modificado mi código de partida. No es muy importante pero he cambiado los nombres de mis celdas.
Gracias por responder tan rápido :). No estoy muy familiarizada con VBA,
No conozco el bucle while....wend :x Estoy lidiando con mi libro de VBA Excel 2003 lol y solo encuentro
Do While.....Loop :x. Presumo que funciona de la misma manera.
Debo admitir que no sé cómo integrar tu fragmento de código.
Entiendo más o menos lo que significa (a priori ^^).
Llamo a ListBox objetivo mi ListBox24.
"Mientras la celda ...... contenga un valor, añade el elemento de la celda en el userform a la ListBox objetivo, luego pasa a la siguiente columna."
Me permito precisar por si acaso :x que mi problema reside en que al hacer clic en validar, quiero añadir un elemento a la siguiente fila en mi tabla de Excel. Por el momento, cuando hago clic en validar, se sobrescribe la selección anterior.
Cuando dices que mi LB objetivo es estática al usar RowSource, ¿significa que no puedo modificar mi ListBox objetivo? ¿que depende exclusivamente de mi tabla de Excel?
Gracias :)
pd: He modificado mi código de partida. No es muy importante pero he cambiado los nombres de mis celdas.
Hola,
Uff, sí, realmente no había entendido todo bien ^^
Do While ... Loop o While ... Wend son casi equivalentes, el Do obliga a pasar al menos una vez por el bucle ...
Para agregar a la siguiente línea, hay que encontrar la última línea vacía de tu tabla. Se puede utilizar esta función
Aquí tienes la última línea vacía de la columna A. Para agregar tu selección retomando tu ejemplo quedaría así:
No dudes en volver si esto no es lo que buscas.
;o)
--
«Lo que se concibe bien se expresa claramente, Y las palabras para decirlo llegan fácilmente.»
Nicolás Boileau
Uff, sí, realmente no había entendido todo bien ^^
Do While ... Loop o While ... Wend son casi equivalentes, el Do obliga a pasar al menos una vez por el bucle ...
Para agregar a la siguiente línea, hay que encontrar la última línea vacía de tu tabla. Se puede utilizar esta función
Dim UltimaLinea As Integer UltimaLinea = Range("A65536").End(xlUp).Row Aquí tienes la última línea vacía de la columna A. Para agregar tu selección retomando tu ejemplo quedaría así:
Dim UltimaLinea As Integer UltimaLinea = Range("AB65536").End(xlUp).Row Range("AB" & UltimaLinea) = ListBox15.Value UltimaLinea = Range("AC65536").End(xlUp).Row Range("AC" & UltimaLinea) = ListBox16.Value No dudes en volver si esto no es lo que buscas.
;o)
--
«Lo que se concibe bien se expresa claramente, Y las palabras para decirlo llegan fácilmente.»
Nicolás Boileau
He integrado este código en mi userform. Y no funciona muy bien :x.
De hecho, no pasa nada :x
Cuando hago clic en mi botón de validar, sigue sobrescribiendo la fila anterior.
Tengo la sensación de que hace lo mismo que tenía antes:
Antes, cuando lo adapté de esta manera, es decir, copiando/pegando lo que me mostró, el elemento de la columna A se pegaba de manera extraña. En el primer clic en la primera fila, en el segundo unas veinte filas más abajo, en el tercero, a una centena de filas más abajo y en el cuarto a la fila 22,222 :x
De hecho, no pasa nada :x
Cuando hago clic en mi botón de validar, sigue sobrescribiendo la fila anterior.
Workbooks("Test Correspondance7 v7.6.xls").Activate Dim DerniereLigneA As Integer Dim DerniereLigneB As Integer DerniereLigneA = Range("A65536").End(xlUp).Row Range("A2" & DerniereLigne) = ListBox1.Value DerniereLigneB = Range("B65536").End(xlUp).Row Range("B2" & DerniereLigne) = ListBox2.Value Calculate Me.ListBox17.RowSource = "Sheet1!A2:C2" Tengo la sensación de que hace lo mismo que tenía antes:
Workbooks("Test Correspondance7 v7.6.xls").Activate Range("A2") = ListBox1.Value Range("B2") = ListBox2.Value Calculate Me.ListBox17.RowSource = "Sheet1!A2:C2" Antes, cuando lo adapté de esta manera, es decir, copiando/pegando lo que me mostró, el elemento de la columna A se pegaba de manera extraña. En el primer clic en la primera fila, en el segundo unas veinte filas más abajo, en el tercero, a una centena de filas más abajo y en el cuarto a la fila 22,222 :x
Ahora solo tengo un fragmento de código... es difícil decir algo.
"Test Correspondance7 v7.6.xls" ??? ¿qué es exactamente? ¿el libro activo, un libro abierto? ¿el libro que contiene el UF?
Para poder responderte, es necesario tener una visión general de lo que quieres hacer.
También puedes enviar tu libro o un zip del entorno a través de http://www.cjoint.com, luego pegas aquí el enlace proporcionado por el sitio. Elimina los datos sensibles o confidenciales y reemplázalos por cosas ficticias como "toto" "tata" "Pim" "Pam" "Pom" ... ^^
;o)
"Test Correspondance7 v7.6.xls" ??? ¿qué es exactamente? ¿el libro activo, un libro abierto? ¿el libro que contiene el UF?
Para poder responderte, es necesario tener una visión general de lo que quieres hacer.
También puedes enviar tu libro o un zip del entorno a través de http://www.cjoint.com, luego pegas aquí el enlace proporcionado por el sitio. Elimina los datos sensibles o confidenciales y reemplázalos por cosas ficticias como "toto" "tata" "Pim" "Pam" "Pom" ... ^^
;o)
Gracias Polux :)
Aquí está la respuesta a la pregunta, ¡gracias a él!
Aquí está la respuesta a la pregunta, ¡gracias a él!
Dim ws As Worksheet Workbooks("***.xls").Activate Set ws = ThisWorkbook.Worksheets(1) Dim DerniereLigneA As Integer Dim DerniereLigneB As Integer DerniereLigneA = ws.Range("A65536").End(xlUp).Row + 1 Range("A" & DerniereLigneA) = ListBox1.Value DerniereLigneB = Range("B65536").End(xlUp).Row + 1 Range("B" & DerniereLigneB) = ListBox2.Value Calculate 'Inicialización y llenado de listbox17 Dim Derligne As Long 'ListBox17.Clear Derligne = ws.Range("A65536").End(xlUp).Row + 1 Me.ListBox17.RowSource = "Sheet1!A2:C" & Derligne & ""