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