¿Cómo llenar mediante código VBA para Excel la propiedad RowSource de un ComboBox?

Necesito alguna idea de como llenar mediante código VBA para Excel la propiedad RowSource de un ComboBox - con los valores de una columna, como valores únicos.. Ejemplo:
Tengo una hoja con datos de contratos, donde en la columna a se repite el numero de cada contrato por tantas facturas como se hayan emitido... Lo que necesito es que en el ComboBox se vean los números de contratos sin repetirse su numero... Algo parecido a la opción del FoxPro INDEX... UNIQUE. Gracias anticipadas. Alberto

1 respuesta

Respuesta
1
Tengo este código escrito para un ListBox en Visual FoxPro; pero por lo que dices tienes idea de como programar en FoxPro. El siguiente ejemplo, espero que lo puedas adaptar a tu aplicación en VBA:
SELECT * ;
FROM NOMBRES.DBF ;
WHERE nombres.dv = .F. ;
.AND. NOT DELETED() ;
ORDER BY nombres.nombre ;
INTO ARRAY aPrincipal
THISFORM.lstPrincipal.RowSource = 'aPrincipal'
En este ejemplo debes modificar la primera línea; que selecciona todos los registros de la tabla y los coloca en un arreglo de memoria; por lo siguiente para presentar solo aquellos que son distintos:
SELECT DISTINCT ;
Esto evita las duplicaciones. Hasta pronto y no olvides valorar la respuesta.
Gracias, aplicare probare tu idea a ver si me resulta mejor que la que ya pensé, la cual te ofrezco para tu biblioteca. Gracias por tu tiempo y Respuesta.
Private Sub UserForm_Activate()
'Tomando el valor de la ultima fila con datos
mRow = Hoja3. Range("A:A"). Find(Empty, LookIn:=xlValues).Row - 1
'Inicializando variables
xxLAnt = "" 'Variable donde guardar valor a comparar
xxUno = "" 'Variable para el primer valor de la lista
'Rango de información para ordenar
mRange = "A1:AI" + Trim(Str(mRow))
'Ordenando datos (LO MÁS IMPORTANTE DE ESTE CÓDIGO)
'Sin esto el resultado seria impredecible
MyOrder = Range(mRange).Sort(header:=xlYes, key1:=Range("Q1"), Orientation:=xlSortColumns)
'Ciclo para comparar cada valor y tomar solo uno de ellos
For Each xxL In Hoja3.Range("Q2:Q" + Trim(Str(mRow)))
If xxL.Value <> xxLAnt Then
'Tomando el primer valor
If xxUno = "" Then xxUno = xxL.Value
'Estableciendo este valor para que no se repita
xxLAnt = xxL.Value
'Agregando nuevo valor a la lista
ListCli.AddItem (xxL.Value)
End If
Next xxL
'Estableciendo Primer valor
'Y provocando el evento change()
ListCli.Value = xxUno
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas