Validaciones de Múltiples celdas con ComboBox

21/06/2007 - 23:45 por Racso | Informe spam
Hola a todos,
He diseñado un hoja de pedidos en una hoja de cálculo (no como formulario)
reduciendo las lineas a 8 pts y columnas a 1 pts (formando un cuadriculado
para poder diseñar muchos elementos de mi formulario de pedidos). En ella
tengo áreas que son celdas combinadas y cada una tiene una lista de
validadión (p.e. nombre del cliente, nombre del representante,
descrip-articulo).
A estas listas de validación he asociado un ComboBox "flotante" para
mediante código validar y mostrar en la lista respectiva el texto que vaya
ingresando progresivamente y pueda elegir mas rapidamente.
Para esto he usado como base el código recomendado en www.contextures.com
(recomendado por Hector Miguel) el cual adjunto mas abajo.
Mi problema es que al hacer el "doble clic" en una de estas "celdas"
validadas (rango combinado) aparece el combobox, como manda el código, pero
con dos flechas al lado derecho para desplegar las listas (una del ComboBox
y otra de lista de validacion), aun mas la flecha del ComboBox no lista nada
y la lista de validación si lista los items pero no obedece a la propiedad
del comboBox.
He revisado las recomendaciones de Hector Miguel en http://tinyurl.com/z3euj
y en http://tinyurl.com/bvlsw y no encontré una solución a mi problema,
aunque, debo decirlo, encontré alli otras valiosas ayudas para otros
problemas (excelente Hector Miguel).
Gracias de adelanto

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet
Cancel = True
Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
With cboTemp
'clear and hide the combo box
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
On Error GoTo errHandler
If Target.Validation.Type = 3 Then
'if the cell contains a data validation list
Application.EnableEvents = False
'get the data validation formula
str = Target.Validation.Formula1
str = Right(str, Len(str) - 1)
With cboTemp
'show the combobox with the list
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = ws.Range(str).Address
.LinkedCell = Target.Address
End With
cboTemp.Activate
End If

errHandler:
Application.EnableEvents = True
Exit Sub

End Sub
'=Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet

Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
If cboTemp.Visible = True Then
With cboTemp
.Top = 10
.Left = 10
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End With
End If

errHandler:
Application.EnableEvents = True
Exit Sub

End Sub
'=='Optional code to move to next cell if Tab or Enter are pressed
'from code by Ted Lanham
Private Sub TempCombo_KeyDown(ByVal _
KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Select Case KeyCode
Case 9 'Tab
ActiveCell.Offset(0, 1).Activate
Case 13 'Enter
ActiveCell.Offset(1, 0).Activate
Case Else
'do nothing
End Select
End Sub
'==

Oscar M

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
22/06/2007 - 04:22 | Informe spam
hola, Oscar !

... un hoja de pedidos... tengo... celdas combinadas y cada una tiene una lista de validadion...
A estas listas de validacion he asociado un ComboBox "flotante" para ...
validar y mostrar... el texto que vaya ingresando progresivamente y pueda elegir mas rapidamente...
Mi problema es que al hacer el "doble clic" en una de estas "celdas" validadas (rango combinado)
aparece el combobox, como manda el codigo, pero con dos flechas... (una del ComboBox y otra de lista de validacion)
aun mas la flecha del ComboBox no lista nada y la lista de validacion si... pero no obedece a la propiedad del comboBox [...]



1) para que no te aparezcan las dos 'flechas', prueba desmarcando al opcion de mostrar lista desplegable en las validaciones :))

2) el unico y verdadero 'problema'... es que las celdas *combinadas* NO son *sujetas* de ser aplicadas a la propiedad 'LinkedCell'
aun si las tratas de 'forzar' no por su 'Target.Address', sino [p.e.] estableciendo cualquier celda_1 de un rango combinado
[aunque no existe documentacion que comente este comportamiento ni se si deba considerarse un *bug*] :-((

-> lo que si... es un argmento mas a la lista del porque las celdas combinadas resultan... *odiosas* :D

3) el primer codigo [el del doble-click en las celdas] lo puedes 'aligerar' si lo cambias por el siguiente:
solo asegurate que el ComboBox sea 'llamado' por su CodeName apropiado, en mi ejemplo es ComboBox1
[y siempre que el 'Target' NO resulte ser una celda parte de un rango *combinado*] ;)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Me.ComboBox1
On Error Resume Next
If Target.Validation.Type <> 3 Then GoTo Fin
Cancel = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = Mid(Target.Validation.Formula1, 2)
.LinkedCell = Target.Address
.Visible = True
.Activate
Exit Sub
Fin:
.Visible = False
.ListFillRange = ""
.LinkedCell = ""
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Racso
22/06/2007 - 21:12 | Informe spam
"Héctor Miguel" wrote:

hola, Oscar !

> ... un hoja de pedidos... tengo... celdas combinadas y cada una tiene una lista de validadion...
> A estas listas de validacion he asociado un ComboBox "flotante" para ...
> validar y mostrar... el texto que vaya ingresando progresivamente y pueda elegir mas rapidamente...
> Mi problema es que al hacer el "doble clic" en una de estas "celdas" validadas (rango combinado)
> aparece el combobox, como manda el codigo, pero con dos flechas... (una del ComboBox y otra de lista de validacion)
> aun mas la flecha del ComboBox no lista nada y la lista de validacion si... pero no obedece a la propiedad del comboBox [...]

1) para que no te aparezcan las dos 'flechas', prueba desmarcando al opcion de mostrar lista desplegable en las validaciones :))

2) el unico y verdadero 'problema'... es que las celdas *combinadas* NO son *sujetas* de ser aplicadas a la propiedad 'LinkedCell'
aun si las tratas de 'forzar' no por su 'Target.Address', sino [p.e.] estableciendo cualquier celda_1 de un rango combinado
[aunque no existe documentacion que comente este comportamiento ni se si deba considerarse un *bug*] :-((

-> lo que si... es un argmento mas a la lista del porque las celdas combinadas resultan... *odiosas* :D

3) el primer codigo [el del doble-click en las celdas] lo puedes 'aligerar' si lo cambias por el siguiente:
solo asegurate que el ComboBox sea 'llamado' por su CodeName apropiado, en mi ejemplo es ComboBox1
[y siempre que el 'Target' NO resulte ser una celda parte de un rango *combinado*] ;)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Me.ComboBox1
On Error Resume Next
If Target.Validation.Type <> 3 Then GoTo Fin
Cancel = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = Mid(Target.Validation.Formula1, 2)
.LinkedCell = Target.Address
.Visible = True
.Activate
Exit Sub
Fin:
.Visible = False
.ListFillRange = ""
.LinkedCell = ""
End With
End Sub

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


Gracias HECTOR


Estoy haciendio los cambios que me sugieres, y luego te comento.

Slds
Respuesta Responder a este mensaje
#3 Racso
23/06/2007 - 03:27 | Informe spam
Hector,
Gracias por tu ayuda. Siempre acertada. A pesar de las celdas combinadas el
combobox funciona.

Si no es demasiado pedir, quiero pedirte otra manito. En mi formulario de
pedido tengo una celda F5 (rango combinado hasta K6) validada con lista en
donde busco el nombre de mis clientes con el combobox que hemos descrito.
Hasta ahi sin problemas.
Resulta que a veces no tengo el nombre exacto de mi cliente y solo se una
parte de él (p.e. el nombre completo es 'Agricola BPM SA' y solo conozco
'BPM' por cuanto es dificil memorizarlos todos). Para fines de mi formulario
necesito buscarlos y entrar el nombre completo.
Los datos de mis clientes estan en la misma hoja y en una tabla simple y
cuya columna1 tiene el nombre completo, es decir, la tabla es asi :
AA AB AC AD
AE
1 Nombre Codigo Direccion RUC Ciudad . .
. . .
2 Agricola BPM 135366 ..
3 Agropecuaria El Agricultor 152457 .
4 Agroveterinaria El Vecino 123458 ..

Me gustaria que me ayudes con una Macro (boton) para buscar el nombre
completo a partir del nombre parcial de mi cliente el cual escribo en otra
celda L3 (rango combinado hasta R4) sin validar y que al hacer clic en el
boton, ubique el nombre completo y lo copie a la celda validada (rango
combinado), que logicamente debe permitir pegarlo por ser un nombre que esta
en la lista de validación.
Espero haber explicado bien lo que necesito

Gracias por adelantado

"Racso" wrote:



"Héctor Miguel" wrote:

> hola, Oscar !
>
> > ... un hoja de pedidos... tengo... celdas combinadas y cada una tiene una lista de validadion...
> > A estas listas de validacion he asociado un ComboBox "flotante" para ...
> > validar y mostrar... el texto que vaya ingresando progresivamente y pueda elegir mas rapidamente...
> > Mi problema es que al hacer el "doble clic" en una de estas "celdas" validadas (rango combinado)
> > aparece el combobox, como manda el codigo, pero con dos flechas... (una del ComboBox y otra de lista de validacion)
> > aun mas la flecha del ComboBox no lista nada y la lista de validacion si... pero no obedece a la propiedad del comboBox [...]
>
> 1) para que no te aparezcan las dos 'flechas', prueba desmarcando al opcion de mostrar lista desplegable en las validaciones :))
>
> 2) el unico y verdadero 'problema'... es que las celdas *combinadas* NO son *sujetas* de ser aplicadas a la propiedad 'LinkedCell'
> aun si las tratas de 'forzar' no por su 'Target.Address', sino [p.e.] estableciendo cualquier celda_1 de un rango combinado
> [aunque no existe documentacion que comente este comportamiento ni se si deba considerarse un *bug*] :-((
>
> -> lo que si... es un argmento mas a la lista del porque las celdas combinadas resultan... *odiosas* :D
>
> 3) el primer codigo [el del doble-click en las celdas] lo puedes 'aligerar' si lo cambias por el siguiente:
> solo asegurate que el ComboBox sea 'llamado' por su CodeName apropiado, en mi ejemplo es ComboBox1
> [y siempre que el 'Target' NO resulte ser una celda parte de un rango *combinado*] ;)
>
> Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
> With Me.ComboBox1
> On Error Resume Next
> If Target.Validation.Type <> 3 Then GoTo Fin
> Cancel = True
> .Left = Target.Left
> .Top = Target.Top
> .Width = Target.Width + 5
> .Height = Target.Height + 5
> .ListFillRange = Mid(Target.Validation.Formula1, 2)
> .LinkedCell = Target.Address
> .Visible = True
> .Activate
> Exit Sub
> Fin:
> .Visible = False
> .ListFillRange = ""
> .LinkedCell = ""
> End With
> End Sub
>
> si cualquier duda [o informacion adicional]... comentas ?
> saludos,
> hector.
>
>
> Gracias HECTOR
Estoy haciendio los cambios que me sugieres, y luego te comento.

Slds


Respuesta Responder a este mensaje
#4 Héctor Miguel
23/06/2007 - 05:32 | Informe spam
hola, Oscar !

... A pesar de las celdas combinadas el combobox funciona.



cierto !... el comportamiento de 'no se puede' aplica solo a la version 97 :D

... tengo una celda F5 (rango combinado hasta K6) validada con lista
... busco el nombre de mis clientes con el combobox que hemos descrito
... a veces no tengo el nombre exacto... solo se una parte
... (p.e. el nombre completo es 'Agricola BPM SA' y solo conozco 'BPM'... dificil memorizarlos todos)
... necesito buscarlos y entrar el nombre completo estan en la misma hoja... la tabla es asi:
AA AB AC AD AE
1 Nombre Codigo Direccion RUC Ciudad . . . . .
2 Agricola BPM 135366 ..
3 Agropecuaria El Agricultor 152457 .
4 Agroveterinaria El Vecino 123458 ..
... Macro (boton) para buscar el nombre completo a partir del nombre parcial
... el cual escribo en... L3 (rango combinado hasta R4) sin validar... lo copie a la celda validada
... que logicamente debe permitir pegarlo por ser un nombre que esta en la lista de validacion.



1) por codigo... puedes 'meter' cualquier cosa en una celda *validada* [aun si no es parte de la lista]
las validaciones funcionan SOLO para entradas directas por parte del usuario, no se aplican a las macros :))

2) te sugiero usar los filtros avanzados, y agregar un control de lista [ListBox1] y un boton [CommandButton1] a la hoja
puedes ubicar el cuadro de lista [p.e.] debajo de la celda donde se depositara la seleccion -> por doble-click <= OJO
deberas primero escribir el nombre parcial [en L3] y seleccionar despues la celda validada [F5]
suponiendo que las celdas a partir de la columna AH estan libres... -> copia el titulo de AA1 a AH1
el siguiente codigo usa la columna AH para criterios y la columna AI para los resultados
OJO: no se hasta donde termina tu listado de nombres [columna A] y probablemente necesitas adaptar otra forma -?-

en el modulo de codigo de 'esa' hoja ==Private Sub CommandButton1_Click()
Range("ah2") = "*" & Range("L3") & "*"
Range("aa1:aa100").AdvancedFilter xlFilterCopy, Range("ah1:ah2"), Range("ai1")
ListBox1.List = Range(Range("ai2"), Range("ai2").End(xlDown)).Value
ListBox1.Visible = True
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell = ListBox1.Text
ActiveCell.Select
ListBox1.Clear
ListBox1.Visible = False
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida