Liga doble celda-combo box?

01/11/2005 - 19:26 por Hernandez, Roberto | Informe spam
Saludos.
Una ayuda. El siguiente código lo uso para una consulta en la que ligo un
combo a una celda (Y2) en una pantalla de consultas.
Y2 contiene el ID del empleado y el combo el nombre.
Hago esto porque Y2 es parámetro de muchos buscarV en la misma hoja.
Así cuando seleccionan un nombre en el combo, Y2 cambia y por lo tanto todos
los buscarV.
Y cuando escriben un numero en Y2, cambia el combo y todos los buscarV...
El problema es cuando cierro el libro, porque me manda un sendkeys del
numero ID al libro que se queda abierto, lo cual, como saben es algo
indeseable.

Como que las musas se me han ido de vacaciones.
Alguna sugerencia para evitar el envío de un dato 'indeseable' ?


'***********************************************************
Private Sub ComboBox1_DropButtonClick()
ComboBox1.Font.Size = 8 'Letra mas chica para que quepa todo el nombre
End Sub

Private Sub ComboBox1_change()
Sheets("MainRqst").Range("$Y$2").Activate 'Activo la celda donde está el ID
SendKeys [Y2] ' Lo tecleo
SendKeys "{enter}" 'Doy enter
ComboBox1.Font.Size = 16 'Regreso la letra del combo a su tamaño original
Plop 'Un sonido de confirmación
End Sub
'******************************************************

Preguntas similare

Leer las respuestas

#1 Hernandez, Roberto
01/11/2005 - 19:44 | Informe spam
Olvidé comentar que uso el sendkeys porque la propiedad LinkedCell del combo
si cambia el valor de Y2, pero no se actualizan los buscarV, sino hasta que
el usuario da [Enter], lo cual le ´resta´ funcionalidad a la pantalla de
consulta.

De la manera que yo lo hago, no es necesario seleccionar el nombre en el
combo y luego dar [enter].

"Hernandez, Roberto" escribió en el mensaje
news:
Saludos.
Una ayuda. El siguiente código lo uso para una consulta en la que ligo un
combo a una celda (Y2) en una pantalla de consultas.
Y2 contiene el ID del empleado y el combo el nombre.
Hago esto porque Y2 es parámetro de muchos buscarV en la misma hoja.
Así cuando seleccionan un nombre en el combo, Y2 cambia y por lo tanto
todos los buscarV.
Y cuando escriben un numero en Y2, cambia el combo y todos los buscarV...
El problema es cuando cierro el libro, porque me manda un sendkeys del
numero ID al libro que se queda abierto, lo cual, como saben es algo
indeseable.

Como que las musas se me han ido de vacaciones.
Alguna sugerencia para evitar el envío de un dato 'indeseable' ?


'***********************************************************
Private Sub ComboBox1_DropButtonClick()
ComboBox1.Font.Size = 8 'Letra mas chica para que quepa todo el nombre
End Sub

Private Sub ComboBox1_change()
Sheets("MainRqst").Range("$Y$2").Activate 'Activo la celda donde está el
ID
SendKeys [Y2] ' Lo tecleo
SendKeys "{enter}" 'Doy enter
ComboBox1.Font.Size = 16 'Regreso la letra del combo a su tamaño original
Plop 'Un sonido de confirmación
End Sub
'******************************************************


Respuesta Responder a este mensaje
#2 Héctor Miguel
02/11/2005 - 05:08 | Informe spam
hola, Roberto !

... comentar que uso el sendkeys porque la propiedad LinkedCell del combo si cambia el valor de Y2
pero no se actualizan los buscarV, sino hasta que el usuario da [Enter], lo cual le ´resta´ funcionalidad ...
De la manera que yo lo hago, no es necesario seleccionar el nombre en el combo y luego dar [enter].



la -verdadera- 'razon' por la que no se actualizan los buscarv... es porque 'el foco' se queda en el combo :-(
[hasta que se sale del mismo -p.e.- como lo estas 'forzando' con el uso del sendkeys] :D
prueba con las siguientes lineas ...
en el modulo de codigo de 'esa' hoja ==Private Sub ComboBox1_DropButtonClick()
ComboBox1.Font.Size = 8 'Letra mas chica para que quepa todo el nombre
End Sub
Private Sub ComboBox1_Change()
Plop 'Un sonido de confirmación
SendKeys "{esc}"
End Sub
Private Sub ComboBox1_LostFocus()
ComboBox1.Font.Size = 16 'Regreso la letra del combo a su tamaño original
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#3 Hernandez, Roberto
02/11/2005 - 15:09 | Informe spam
Buen dia Hector:

Como siempre agradezco de sobremanera tu atención.
Efectivamente el foco se queda en el combo, lo que ocasiona la no
'actualización' de los campos de datos.
El código que tan amablemente me haces llegar, cambia los datos, ya sólo
tengo problema con la foto y la firma, ambas .jpg

Si tecleo el ID, se actualizan datos pero la foto y la firma
'desaparecen'...
Si selecciono por nombre [desde el combo], se actualizan los datos, pero se
quedan la foto y la firma de la consulta 'anterior'...

Te mando el código de actualización de las imágenes. Es un código que ví en
este foro, con las adecuadas [inadecuadas] horrorizaciones
[adecuaciones...?]
para ver si me puedes decir que hacer...

Private Sub Worksheet_Change(ByVal Target As Range)




If Not Target.Address = "$Y$2" Then Exit Sub

UserForm5.Hide

Correcto = True

Dim De_donde As String, De_donce As String, Foto As Object, Firma As
Object, _

Arriba As Double, Izquierda As Double, Ancho As Double, Alto As
Double, _

User As String

Sheets("MAINRQST").Unprotect "thpsswrd"

Application.ScreenUpdating = False

On Error Resume Next



If Sheets("MAINRQST").Range("$IT$1") <> Sheets("MAINRQST").Range("$IS$1")
And Sheets("MAINRQST").Range("$IT$1") <> "MASTER" Then

UserForm2.Show

Espera

UserForm2.Hide

Sheets("MAINRQST").Range("$Y$2").Select

Sheets("MAINRQST").Range("$Y$2").Value =
Sheets("MAINRQST").Range("$IT$3").Value

Sheets("MAINRQST").Protect "thpsswrd"

Correcto = False

Else

End If



If Sheets("MAINRQST").Range("$Y$16") <> "Activo" Then

UserForm5.Show

End If



If Sheets("MAINRQST").Range("$Y$16") = "Eventual" Then

Me.Shapes("La_Foto").Delete

Me.Shapes("La_Firma").Delete

Sheets("MAINRQST").Protect "thpsswrd"

End If



Me.Shapes("La_Foto").Delete

Me.Shapes("La_Firma").Delete

De_donde = "S:\SICI\Data\fotos\" & [Y2] & ".jpg"

De_donce = "S:\SICI\Data\Firmas\" & [Y2] & ".jpg"



If Dir(De_donde) = "" Then

Sheets("MAINRQST").Protect "thpsswrd"

Exit Sub

End If



If Not Correcto Then Exit Sub



Set Foto = Me.Pictures.Insert(De_donde)

Set Firma = Me.Pictures.Insert(De_donce)



With Me.Range("ar6:ba19")

Arriba = .Top

Izquierda = .Left

Ancho = .Offset(0, .Columns.Count).Left - .Left

Alto = .Offset(.Rows.Count, 0).Top - .Top

End With



With Foto

.Name = "La_Foto"

.Top = Arriba

.Left = Izquierda

.Width = Ancho

.Height = Alto

End With



Set Foto = Nothing



With Firma

.Name = "La_Firma"

.Top = Arriba + 170

.Left = Izquierda - 130

.Width = Ancho + 140

.Height = Alto - 70

End With



Set Firma = Nothing



Sheets("MAINRQST").Range("$Y$2").Select

'If Sheets("MAINRQST").Range("$Y$16") <> "Activo" Then UserForm5.Show

Sheets("MAINRQST").Protect "thpsswrd"



Sheets("MAINRQST").Activate

End Sub





"Héctor Miguel" escribió en el mensaje
news:
hola, Roberto !

... comentar que uso el sendkeys porque la propiedad LinkedCell del combo
si cambia el valor de Y2
pero no se actualizan los buscarV, sino hasta que el usuario da [Enter],
lo cual le ´resta´ funcionalidad ...
De la manera que yo lo hago, no es necesario seleccionar el nombre en el
combo y luego dar [enter].



la -verdadera- 'razon' por la que no se actualizan los buscarv... es
porque 'el foco' se queda en el combo :-(
[hasta que se sale del mismo -p.e.- como lo estas 'forzando' con el uso
del sendkeys] :D
prueba con las siguientes lineas ...
en el modulo de codigo de 'esa' hoja ==> Private Sub ComboBox1_DropButtonClick()
ComboBox1.Font.Size = 8 'Letra mas chica para que quepa todo el nombre
End Sub
Private Sub ComboBox1_Change()
Plop 'Un sonido de confirmación
SendKeys "{esc}"
End Sub
Private Sub ComboBox1_LostFocus()
ComboBox1.Font.Size = 16 'Regreso la letra del combo a su tamaño original
End Sub

saludos,
hector.

Respuesta Responder a este mensaje
#4 Héctor Miguel
03/11/2005 - 00:24 | Informe spam
hola, Roberto !

Efectivamente el foco se queda en el combo, lo que ocasiona la no 'actualización' de los campos de datos.
El codigo... cambia los datos, ya solo tengo problema con la foto y la firma, ambas .jpg
Si tecleo el ID, se actualizan datos pero la foto y la firma 'desaparecen'...
Si selecciono por nombre [desde el combo], se actualizan los datos, pero se quedan la foto y la firma de la consulta 'anterior'...
Te mando el codigo de actualización de las imagenes... para ver si me puedes decir que hacer...
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$Y$2" Then Exit Sub [...]



[ahora]... el 'detalle' esta en que la actualizacion de las imagenes esta ligada al evento '_change' en el modulo de 'esa' hoja y...
[hasta donde se]... dicho evento NO se 'dispara' cuando el cambio en las celdas ocurre por objetos incrustados [como el combo] :-(
lo que no me queda claro es si el combo es 'opcional' y el usuario puede teclear directamente en la celda 'comando' -?-

te paso al final algunas opciones [con sus 'asegunes'] :))
saludos,
hector.

op1: 'ordenale' al evento '_change' que se 'auto-detecte' al hacer cambios de seleccion en el combo [p.e.]
en el modulo de codigo de la hoja con el combo y las imagenes ==Private Sub ComboBox1_Change()
Beep 'Plop 'Un sonido de confirmación
SendKeys "{esc}"
Worksheet_Change [y2]
End Sub
=> podria darse el caso de que alguna intruccion en el evento '_change' [de la hoja] entorpezca el funcionamiento del combo
[o que por alguna razon 'desconocida' los eventos se 'disparen' por duplicado] :))
[ademas] si el codigo se ejecuta en versiones anteriores, el evento '_change' de la hoja necesita NO ser 'private'

op2: 'mueve' los codigos relativos a las imagenes del evento '_change' [de la hoja] al evento '_change' [del combo]
=> SOLO en caso de que no se permita que el usuario intruduzca los cambios en Y2 de forma 'manual'
y [ademas] quedaria imposibilitado el usuario para cambiar las imagenes el teclear 'en directo' en la celda Y2

op3: 'mueve' los codigos relativos a las imagenes del evento '_change' [de la hoja] a un modulo 'normal' [macro "X"]
=> y llamas a dicha macro tanto en el evento de la hoja como en el evento del combo
Respuesta Responder a este mensaje
#5 Hernandez, Roberto
03/11/2005 - 01:54 | Informe spam
"Héctor Miguel" escribió
hola, Roberto !

[ahora]... el 'detalle' esta en que la actualizacion de las imagenes esta
ligada al evento '_change' en el modulo de 'esa' hoja y...
[hasta donde se]... dicho evento NO se 'dispara' cuando el cambio en las
celdas ocurre por objetos incrustados [como el combo] :-(
lo que no me queda claro es si el combo es 'opcional' y el usuario puede
teclear directamente en la celda 'comando' -?-




Tienes razón [como siempre], lo que necesito hacer es capturar un evento
diferente...
Fíjate que quizás dentro de mi pequeña 'capacidad creativa' este método ha
solucionado una necesidad de los usuarios de la pantalla de consulta.
Ellos necesitan poder teclear su ID NUMBER en [Y2], o si no saben el ID
[puede ser su jefe el que hace la consulta], entonces buscar por NOMBRE
EMPLEADO...
[Y2] tiene una validación que permite seleccionar de una lista, y la
selección por nombre se da en el combo... Y ahí fue donde hice mi
'menjurge'..

Quizás debería reevaluar mi método con alguna de tus buenas propuestas...

Mil gracias por todo tu apoyo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida