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
 

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.

Preguntas similares