crear busqueda para ayuda

24/09/2007 - 05:08 por melomanus | Informe spam
Hace unos dias publique una pregunta para porder crear un formulario de
ayuda, estuve investigando como resolver dicha "problema", y pude obtener
unos alcances, como por ejemplo llenar un control listbox en un userform, de
una lista obtenida de otra hoja de calculo en un mismo libro.

Explico mas o menos lo que tengo.
1. una hoja de calcula tengo la información de las Unidades Organicas de una
institucion.
CodUnidad Desrcipcion
001 Administracion
002 Personal
003 Abastecimiento
Etc
2. en una hoja principal al presionar las tecjas Ctrl+H aparece una ayuda
(formulario=userform) de dicha hoja con las Unidades Organicas.
el userform contiene un TextBox (Texto a Buscar), Boton (Buscar),
ListBox (listado de unidad organica), boton (Aceptar, coloca la opcion
elegida en la hoja Principal)

Bueno lo que falta es hacer funcionar el boton busqueda segun lo que se
escriba en el textbox, y aparezca solo las concidencias en el listbox.



Este codigo lo "cogí" de una pagina. que me permite llenar el listbox, pero
con este codigo no se como hacer la busqueda, derrepente hubiera otra forma
quisiera su ayuda, Michas Gracias por su apoyo.


Private Sub UserForm_Initialize()
Dim MyUniqueList As Variant, i As Long
With Me.lstSimple
.Clear ' clear the listbox content
MyUniqueList = UniqueItemList(Range("UnidadOrganica!C2:C39"),True)
For i = 1 To UBound(MyUniqueList)
.AddItem MyUniqueList(i)
Next i
.ListIndex = 0 ' select the first item
End With
End Sub

Private Function UniqueItemList(InputRange As Range, HorizontalList As
Boolean) As Variant
Dim cl As Range, cUnique As New Collection, i As Long, uList() As Variant
Application.Volatile
On Error Resume Next
For Each cl In InputRange
If cl.Formula <> "" Then
cUnique.Add cl.Value, CStr(cl.Value)
End If
Next cl
UniqueItemList = ""
If cUnique.Count > 0 Then
ReDim uList(1 To cUnique.Count)
For i = 1 To cUnique.Count
uList(i) = cUnique(i)
Next i
UniqueItemList = uList
If Not HorizontalList Then
UniqueItemList = _
Application.WorksheetFunction.Transpose(UniqueItemList)
End If
End If
On Error GoTo 0
End Function
 

Leer las respuestas

#1 Héctor Miguel
25/09/2007 - 01:10 | Informe spam
hola, 'anonimo/a' !

... llenar un control listbox en un userform, de una lista obtenida de otra hoja de calculo en un mismo libro...
1. una hoja de calcula tengo la informacion de las Unidades Organicas de una institucion.
CodUnidad Desrcipcion
001 Administracion
002 Personal
003 Abastecimiento Etc...
2. en una hoja principal al presionar las tecjas Ctrl+H aparece una ayuda (formulario=userform)... con las Unidades Organicas.
el userform contiene un TextBox (Texto a Buscar), Boton (Buscar), ListBox (listado de unidad organica)
boton (Aceptar, coloca la opcion elegida en la hoja Principal)
... lo que falta es hacer funcionar el boton busqueda segun lo que se escriba en el textbox, y aparezca solo las concidencias en el listbox.
Este codigo lo "cogí" de una pagina que me permite llenar el listbox, pero con este codigo no se como hacer la busqueda
derrepente hubiera otra forma quisiera su ayuda, Michas Gracias por su apoyo.



1) el evento *_initialize* asume que en "UnidadOrganica!C2:C39" existe un listado con -posibes- *repetidos*
y... como dicho evento se dispara JUSTO ANTES de que sea mostrado el formulario...

2) *prepara* al formulario para que cuando se muestre tenga lleno un control [lista o combo] con elementos *unicos*
lo hace a traves de una llamada a la funcion: -> Private Function UniqueItemList(InputRange As Range [etc.]

3) si lo que necesitas es que el control [lista o combo] se llene con los *parecidos* que introduzcas en un control TextBox...
a) el codigo [de busqueda/filtro/...] debe ejecutarse NO en el evento *_initialize* sino en el evento *_click* del boton (Buscar)
b) el *mecanismo* de busqueda/filtro/... puedes cambiarlo [p.e.] por el uso de filtros avanzados
-> si le indicas al codigo en que rango y hoja debe buscar los *parecidos* a lo introducido en el textbox (Texto a Buscar)
c) puedes revisar algunas conversaciones y ejemplos al respecto [p.e.] en: -> http://tinyurl.com/2y7lp6

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Private Sub UserForm_Initialize()
Dim MyUniqueList As Variant, i As Long
With Me.lstSimple
.Clear ' clear the listbox content
MyUniqueList = UniqueItemList(Range("UnidadOrganica!C2:C39"),True)
For i = 1 To UBound(MyUniqueList)
.AddItem MyUniqueList(i)
Next i
.ListIndex = 0 ' select the first item
End With
End Sub

Private Function UniqueItemList(InputRange As Range, HorizontalList As Boolean) As Variant
Dim cl As Range, cUnique As New Collection, i As Long, uList() As Variant
Application.Volatile
On Error Resume Next
For Each cl In InputRange
If cl.Formula <> "" Then
cUnique.Add cl.Value, CStr(cl.Value)
End If
Next cl
UniqueItemList = ""
If cUnique.Count > 0 Then
ReDim uList(1 To cUnique.Count)
For i = 1 To cUnique.Count
uList(i) = cUnique(i)
Next i
UniqueItemList = uList
If Not HorizontalList Then
UniqueItemList = _
Application.WorksheetFunction.Transpose(UniqueItemList)
End If
End If
On Error GoTo 0
End Function

Preguntas similares