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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 melomanus
26/09/2007 - 17:46 | Informe spam
On 24 sep, 18:10, "Héctor Miguel"
wrote:
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- Ocultar texto de la cita -

- Mostrar texto de la cita -



hola Hector gracias por contestar, la verdad no logro entender con
exactitud, cuando mencionas lo de elemento repetidos y de los
elementos únicos, si te re refieres a los elementos del listbox que
son tomados de la (UnidadOrganica!C2:C39), pues no, supongamos que
estos son los elementos del listobox apenas cargo el formulario:

001-CONSEJO REGIONAL
002-SECRETARIA DEL CONSEJO REGIONAL
003-PRESIDENCIA Y VICERESIDENCIA
004-GABINETE DE ASESORES
005-GERENCIA DE ASESORIA JURIDICA
006-OFICINA DE SEGURIDAD INTEGRAL

entonces supongamos que en mi cuadro de texto busqueda escriba:
"ASESOR" y doy click en buscar, mi listbox quedaria de la siguiente
manera:

004-GABINETE DE ASESORES
005-GERENCIA DE ASESORIA JURIDICA

bueno esa es la idea ;)

en todo caso lo indicado en el último parrafo es lo mas parecido a lo
que necesito

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



le hecharé un vistazo y te aviso como voy, si tuvieras otro alcance al
respecto te lo agradeceria.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida