Excel - Problemas con Formulario

 
Vista:

Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 13/06/2007 17:42:01
Buenos dias a todos, aca en Mexico.

Tengo un problema con un userform.
En él, hay una serie de textbox, checkbox y optionbutton.
Bien describo brevemente la parte que me está dando problemas:
Tengo un textbox llamado txtClave, el código está pensado para que efectúe una búsqueda en una base de datos y según con lo que obtenga le modificará el caption a dos etiquetas q están a su lado, hasta ahí esto funciona a la perfección, pero si el usuario ingresa una clave en dicho textbox (algo que no debería suceder, pero es posible) debe marcar un error y seleccionar de nuevo el textbox en comento, pues bien, esto último NO sucede.
El código es el siguiente:

Private Sub txtClave_AfterUpdate()
Dim CveCli$
CveCli = txtClave.Value
Call buskClave(CveCli)
End Sub

Option Explicit
Private Sub buskClave(CveCli As String)
Dim InicioB$, FinalB$
Dim NomClieB$, RFCClieB$
Dim CoincideB As Range

If CveCli = 0 Then
Label16.Caption = "C A N C E L A D A"
txtSerInv.Enabled = True
txtFolInv.Enabled = True
txtFecInv.Enabled = True
txtImportInv.Enabled = False
txtIVAInv.Enabled = False
chkIVA.Enabled = False
txtRetISR.Enabled = False
chkRtISR.Enabled = False
txtRetIVA.Enabled = False
chkRtIVA.Enabled = False
txtFecPago.Enabled = False
optEfe.Enabled = False
optChq.Enabled = False
txtNumChq.Enabled = False
optTransf.Enabled = False
txtRefTran.Enabled = False
txtSerInv.SetFocus
Exit Sub
Else
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False

InicioB = "$A$7"
Range(InicioB).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
FinalB = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqCve", RefersToR1C1:=Range(InicioB, FinalB)
Application.GoTo Reference:="RanBusqCve"
Set CoincideB = Selection.Find(What:=CveCli, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not CoincideB Is Nothing Then
CoincideB.Activate
With ActiveCell
NomClieB = UCase(.Offset(0, 2).Value)
RFCClieB = UCase(.Offset(0, 3).Value)
End With
Label16.Caption = NomClieB
mRFC.Caption = RFCClieB
Sheets("CC").Visible = False
Exit Sub
txtSerInv.SetFocus
Else
MsgBox "La clave " & CveCli & " no existe", vbExclamation, "Clave inválida"
Sheets("CC").Visible = False
Exit Sub
frmCaptura.txtClave.SetFocus
txtClave.Text = txtClave.SelText
End If
End If
End Sub

Por otro lado, no he logrado hacer funcionar el boton "Limpiar", así que me vi obligado a hacer algo como lo siguiente:

Private Sub cmdClearForm_Click()
Unload Me
frmCaptura.Show
'Call UserForm_Initialize
End Sub

Se supone que debería funcionar sencillamente con la instrucción que aparece como comentario, pero me marca un error. Y dicho error me envia precisamente al codigo de buskClave(CveCli As String) en la línea: If CveCli = 0 Then

Agradecere toda la ayuda q puedan proporcionarme, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 13/06/2007 19:27:16
Porque no cuelgas el archivo para poder entenderlo mejor?? En una hoja incluye una explicacion del dilema

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 13/06/2007 21:23:21
Ahi esta la url.

Gracias

http://www.4shared.com/file/17841804/f0e66a0c/01_-_Ingresos.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 13/06/2007 21:38:05
Hola, no explicaste nuevamente y un poco mas detallado que e slo que necesitabas, pero asumo que un cambio era este:

...........

Dim CoincideB As Range

If CveCli = "" Then
Label16.Caption = "C A N C E L A D A"
txtSerInv.Enabled = True
txtFolInv.Enabled = True

..............

Donde tu colocaste cero (0) coloca "".

Lo de limpiar, pues, simplemente en cada textbox colocale:

textbox = Empty

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 13/06/2007 22:07:49
Dentro de el archivo zip se encuentra un archivo de texto con la explicación.

EL problema no esta en poner 0 o "", el detalle está en que si escribimos un valor que la busqueda no encuentra, ademas de enviar el mensaje de error personalizado me devuelva al campo Clave. Lo he intentado con la propiedad setfocus pero simplemente no lo hace.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 13/06/2007 22:36:56
tienes razon, ahi esta la explicacion .Vayamos por partes:

1- No existe un evento "tab" de un objeto, por lo que al presionar dicha tecla, el cursor ira al siguiente objeto en el orden de tabulaciones, asi el setfocus de la rutina que se hubiese corrido este sobre otro objeto, es decir, PREVALECERA EL EVENTO DEL TAB.

2- Mi sincera recomendacion es que uses el evento click d eun nuevo boton para llenar esos label, no el evento afterupdate del textbox txtclave.

3- Sobre lo de limpiar, el dilema principal es que al colocarle "", "borras" el contenido que tiene el txt_clave, es decir lo "actulaizas" y se "dispara" el evento afterupdate, por eso de da el error

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 14/06/2007 16:07:40
Bien, me he creado un nuevo boton para que realice esta tarea.

Pero lo estoy llamando desde el evento afterupdate del textbox Clave. He configurado el orden de tabulación para que el siguiente elemento después del textbox sea el nuevo botón, sin embargo, sigue comportándose igual.
¿Es posible que el error se encuentre dentro del codigo del nuevo botón? Porque el problema no solo data en que no haga foco en el campo que quiero, sino que además elimina el valor ingresado en el campo Clave.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 14/06/2007 17:29:15
Se me ha ocurrido algo, pero no sé si sea posible con vba.
Y es dar alguna instrucción para indicarle al programa que de un shift tab, sera esto posible.
En lugar de dar la instrucción setfocus, decirle algo que interprete como shift tab.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 14/06/2007 17:54:26
Bueno, lo que me dijiste me puso a pensar mucho....

Y después de tanto escarbarle, encontré la forma de hacer lo q quería.
En el último mensaje preguntaba si habia alguna manera de efectuar la combinación de techas shift tab con codigo vba y encontre q si.
Asi q solo lo solucione de esa manera, ya que si hay manera de enviar esa combinacion de teclas por medio de codigo.

Muchas gracias por tu ayuda.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 14/06/2007 18:26:16
Hola Claudio, recien entro por el foro. Que bueno que resolviste tu problema

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por JuanC (792 intervenciones) el 15/06/2007 14:06:51
Parece que llego tarde... pero no importa, quiero hacer algún comentario...
Transcribo lo que decía Abraham:

1- No existe un evento "tab" de un objeto, por lo que al presionar dicha tecla, el cursor ira al siguiente objeto en el orden de tabulaciones, asi el setfocus de la rutina que se hubiese corrido este sobre otro objeto, es decir, PREVALECERA EL EVENTO DEL TAB.

Eso es así, pero puede anularse la función del Tab (o cualquier tecla)
en el evento KeyDown del TextBox

Private Sub txtClave_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = VBA.vbKeyTab Then
KeyCode = 0 'Elimina Tab
End If
End Sub

Otra cosa es decir que después del MsgBox si se pone txtClave.SetFocus
en realidad el foco lo capta txtClave, pero no aparece el Caret (palito parpadeante) debido a que el comportamiento de los componentes en VBA
no es el mismo que en el resto de Windows (no son ventanas 'normales')
No es casualidad que ningún componente en VBA no tenga una propiedad
Handle, característica básica de cualquier ventana... (más allá de que pueda obtenerse ese Handle, no siempre los resultados vía API son los esperados...)

Por último, felicitar a Claudio por la idea del Shift+Tab y para quienes no lo
entiendan, les dejo un fragmento del código original (modificado)...

Private Sub txtClave_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim CveCli$
On Error Resume Next
If KeyCode = VBA.vbKeyTab Then
CveCli = txtClave.Value
If buskClave(CveCli) = False Then
MsgBox "La clave " & CveCli & " no existe", vbExclamation, "Clave inválida"
txtSerInv.SetFocus 'Cambia foco a otro TextBox
SendKeys "+{TAB}" 'Vuelve a txtClave 'presionando' Shift + Tab
txtClave = Empty 'Limpia
End If
End If
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 15/06/2007 16:42:42
Hola Juan, amigo. Siempre te das tiempo para explicar cosas que la verdad a mi me da una flojera jejejejejejejje, aparte del tiempo. PEro bueno, la verdad tus soluciones siempre son exceentes.

Hablando de eso de explicar las cosas hasta el ultimo detalle, como uds los que mas me conocen saben, casi siempre mando (mandamos!!!) a leer a la gente, pues imaginate que ya son 3 veces esta semana que me mandan a la "·%·&"!%% por mandar leer en lugar de explicarles todo jejejejejeje

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 15/06/2007 19:25:42
Bueno, lo importante es investigar, buscar y no quedarte parado a que todo te lo den, creo no hay mérito en ello.

Apenas me he ido metiendo en todo estos asuntos del código vba y es un poco dificil por el hecho que de programación no sé nada, pero no me gusta quedarme de brazos, así que mientras espero una respuesta a mis preguntas sigo buscando la manera de solucionar mi problema expuesto y a veces que me salen las cosas como este asunto. Pero otras veces, soluciono algo y me sale otra cosa, jeje.

Estoy muy agradecidos con ambos por sus comentarios en realidad que ayudan y aunque a veces, tiendo a tomar de aqui y alla finalmente su aportación ha sido muy valiosa para conseguir lo que he estado buscando.

Saludos cordiales desde el caluroso sureste mexicano.

Claudio C.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Problemas con Formulario

Publicado por Abraham Valencia (2415 intervenciones) el 15/06/2007 20:20:05
Hola Claudio, definitivamente tu si eres una de esas personas que REALMENTE se interesa en aprender y no solo en que le hagan las cosas. Tienes manuales de VBA??? quieres que te envie??

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Formulario

Publicado por Claudio C. (43 intervenciones) el 15/06/2007 22:13:08
Gracias Abraham, mira he recolectado por la red una serie de guias, apuntes y cosas asi q te encuentras regadas por ahi, pero no me caeria mal lo que puedas ofrecerme, asi tendré mas material de donde escoger y continuar aprendiendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar