Ayuda con SetFocus

14/09/2006 - 23:59 por vm_tapia | Informe spam
Tengo un formulario con 3 Frames, organizados de la siguiente manera:

En el formulario tengo el Frame2 dentro del Frame1 y el Frame3 esta separado
El orden de tabulacion es por default

en el Frame2 tengo varios TextBox y lo que necesito es que al momento de
capturar un - (guion) en cualquier TextBox del Frame2, el enfoque se
establezca
en el primer TextBox del Frame3.

yo tengo el siguiente codigo
=Private Sub C3_AfterUpdate()
If AltaFacturas.C3.Value = "*" Then
AltaFacturas.PU3.Locked = True
ElseIf AltaFacturas.C3.Value = "-" Then
AltaFacturas.C3.Value = ClearContents
AltaFacturas.ObsFact.SetFocus <<<<< aqui es donde da el error
Else
AltaFacturas.PU3.Locked = False
Cantidad3 = CDbl(AltaFacturas.C3.Value)
Cantidad3 = Round(Cantidad3, 2)
AltaFacturas.C3.Value = ClearContents
ThisWorkbook.Worksheets("Factura").Range("a16").Value = Cantidad3
AltaFacturas.C3.Value = Cantidad3
AltaFacturas.I3.Value =
Format(ThisWorkbook.Worksheets("Factura").Range("ac16").Value, "#,##0.00")
Totales
End If
End Sub
=
y al ejecutar el formulario y capturar el guion el el TextBox3 (C3)
me da el siguiente error:

"se ha produciodel el error '-2147467259(80004005)' en tiempo de ejecucion"
"error no especificado"

¿que estoy haciendo mal?

Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#6 vm_tapia
20/09/2006 - 19:01 | Informe spam
Ivan:

el "ClearContents" sirve para borrar el contenido (Value) del TextBox y yo
lo utilizo porque lo que necesito es capturar un guion en ese TextBox PERO no
quiero dejarlo ahi, asi en la rutina de pasar la informacion del formulario a
la hoja de calculo ese guion ya no existe. Ademas de que me sirve de control
ya que al tener 32 partidas en el formulario de la factura, cuando se captura
el guion en el campo de "Cantidad" ( el guion "indica" que ya no se van a
capturar mas partidas ) se tiene que establecer el foco en el campo de
"Observaciones" y asi evito el movimiento fisico del usuario al tener que
usar el mouse y dar clic en el campo de observaciones o usar la tecla de
tabulacion o el enter para pasar por todos los campos de captura hasta llegar
al campo de observaciones.

Aun asi te agradezco tu interes.


"Ivan" wrote:

Hola vm_tapia

disculpad la intromision, sobre todo porque si alguien te puede ayudar,
uno de los que mas es Hector Miguel y no un servidor, pero hay una cosa
en tu codigo que me llama la atencion y no se si tendra que ver en el
problema (o el problema es mi ignorancia).

AltaFacturas.C3.Value = ClearContents

¿ClearContents que es? ¿una variable? si es asi, tenia entendido que
vba da problemas cuando se usan como nombre de variables terminos
integrados dentro del mismo vba, y, si no me equivoco, clearcontents es
un metodo del objeto range (y quizas de alguno mas)

No se si tendra algo que ver, pero al no llevar punto ni estar dentro
de un bloque with me ha llamado la atencion, pues no se a que hace
referencia. A lo mejor estoy diciendo una tonteria, pero por si acaso.

Un saludo, y espero que HM, o cualquier otro te eche una mano

un saludo y hasta pronto
Ivan


Respuesta Responder a este mensaje
#7 vm_tapia
20/09/2006 - 19:24 | Informe spam
Hector Miguel:

He tomado nota de tus observaciones y me llama la atencion la parte donde
dices:

c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control



y te lo menciono porque he intentado "pasar el foco" dentro del mismo Frame
hacia otro TextBox (todos tienen el evento _AfterUpdate) y asi si funciona,
el problema esta cuando quiero pasar el foco de un TextBox de un Frame X a
otro TextBox de otro Frame.

De hecho no utilizo el evento _Exit en estos campos, pero te menciono que de
acuerdo a tus sugerencia de cambiarlo (punto 2 y 3), SI voy a tener que
utilizarlo, ya que aqui mi patron, que se le ocurre cada cosa, problema,
situacion, etc. y me pregunto lo siguiente:

¿el campo de cantidad solamente acepta NUMEROS? y si ha alguien se le ocurre
capturar una letra ¿que pasa?

como te daras cuenta, con este tipo de preguntas y comentarios, aumenta la
problematica en el diseño y programacion.

Otra cosa:

[p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-



mira despues de la linea ELSE




"Héctor Miguel" wrote:

hola, vm_tapia !

> Tambien ha estado probando con el metodo siguiente
> AltaFacturas.Controls("ObsFact").SetFocus
> y me aparaece el mismo numero de error ademas del mensjae de que no se encontra el objeto especificado...

1) de acuerdo con la ayuda en linea de vba-excel consultando acerca del evento '_afterupdate', podria comentarte lo siguiente:
a) es un evento donde la 'actualizacion' del contenido del control, ocurre SOLO al salir del control
b) es [practicamente] 'igual' al evento '_exit', solo que este ultimo puede 'atrapar/evitar/...' la salida del control
c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control
d) la forma en que lo administras [re/modificando su contenido por instrucciones If...ElseIf...] tiene 'efectos de repeticion'
e) [y algunas otras consideraciones y detalles mas...] :))

2) si cambiaras tu codigo del evento '_afterupdate'... al evento '_exit' de los controles, no obtendrias el mensaje de error... PERO...
a) el evento '_exit' sucede instantes ANTES de que ocurra el evento [es por eso que se puede 'atrpar']... sin embargo...
b) el control 'activo'... NO SABE a cual control va a 'pasarle el foco' [ni el que lo reciba sabe de cual 'proviene'] :)) [entonces]...

3) para poder 'manipular' a cual control le 'concedes' el foco [de manera discrecional, y hasta donde se]...
a) lo mejor es a traves de un procedimiento 'de verificacion' de las condiciones 'pertinentes' para que el foco se pase a 'X' control
b) podrias [p.e.] en el codigo del control que ejecute las acciones 'finales', establecer un mecanismo que vaya comprobando...
1) si alguno de los controles NO 'cumple' con los requisitos del codigo a ejecutarse... 'mande' el foco al control 'pendiente'
2) establecer una 'cadena de condiciones' [p.e. revisando el contenido de los controles 'revisables' y volver al punto anterior -?-

4) [seguramante] tendras otros controles con 'manejo similar' [al codigo que expusiste desde la consulta original], por lo que...
sera necesario un re-planteamiento de la secuencia de comprobaciones via procedimientos 'auxiliares'... y algunas otras 'cosillas'
[p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-

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

>> > __ el codigo expuesto __
>> > > yo tengo el siguiente codigo
>> > > Private Sub C3_AfterUpdate()
>> > > If AltaFacturas.C3.Value = "*" Then
>> > > AltaFacturas.PU3.Locked = True
>> > > ElseIf AltaFacturas.C3.Value = "-" Then
>> > > AltaFacturas.C3.Value = ClearContents
>> > > AltaFacturas.ObsFact.SetFocus <<<<< aqui es donde da el error
>> > > Else
>> > > AltaFacturas.PU3.Locked = False
>> > > Cantidad3 = CDbl(AltaFacturas.C3.Value)
>> > > Cantidad3 = Round(Cantidad3, 2)
>> > > AltaFacturas.C3.Value = ClearContents
>> > > ThisWorkbook.Worksheets("Factura").Range("a16").Value = Cantidad3
>> > > AltaFacturas.C3.Value = Cantidad3
>> > > AltaFacturas.I3.Value = Format(ThisWorkbook.Worksheets("Factura").Range("ac16").Value, "#,##0.00")
>> > > Totales
>> > > End If
>> > > End Sub



Respuesta Responder a este mensaje
#8 vm_tapia
20/09/2006 - 19:31 | Informe spam
Hector Miguel:

Discupa el no despedirme adecuadamente en mi respuesta anterior.

Ademas de hacerte una pregunta

¿cual seria tu eleccion del evento a utilizar? ¿AfterUpdate?, ¿Exit?, ¿Change?

a estas alturas del partido ya no se cual utilizar

Gracias por tu apoyo y Saludos.

Victor Manuel.


"vm_tapia" wrote:

Hector Miguel:

He tomado nota de tus observaciones y me llama la atencion la parte donde
dices:

> c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control

y te lo menciono porque he intentado "pasar el foco" dentro del mismo Frame
hacia otro TextBox (todos tienen el evento _AfterUpdate) y asi si funciona,
el problema esta cuando quiero pasar el foco de un TextBox de un Frame X a
otro TextBox de otro Frame.

De hecho no utilizo el evento _Exit en estos campos, pero te menciono que de
acuerdo a tus sugerencia de cambiarlo (punto 2 y 3), SI voy a tener que
utilizarlo, ya que aqui mi patron, que se le ocurre cada cosa, problema,
situacion, etc. y me pregunto lo siguiente:

¿el campo de cantidad solamente acepta NUMEROS? y si ha alguien se le ocurre
capturar una letra ¿que pasa?

como te daras cuenta, con este tipo de preguntas y comentarios, aumenta la
problematica en el diseño y programacion.

Otra cosa:

> [p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-

mira despues de la linea ELSE




"Héctor Miguel" wrote:

> hola, vm_tapia !
>
> > Tambien ha estado probando con el metodo siguiente
> > AltaFacturas.Controls("ObsFact").SetFocus
> > y me aparaece el mismo numero de error ademas del mensjae de que no se encontra el objeto especificado...
>
> 1) de acuerdo con la ayuda en linea de vba-excel consultando acerca del evento '_afterupdate', podria comentarte lo siguiente:
> a) es un evento donde la 'actualizacion' del contenido del control, ocurre SOLO al salir del control
> b) es [practicamente] 'igual' al evento '_exit', solo que este ultimo puede 'atrapar/evitar/...' la salida del control
> c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control
> d) la forma en que lo administras [re/modificando su contenido por instrucciones If...ElseIf...] tiene 'efectos de repeticion'
> e) [y algunas otras consideraciones y detalles mas...] :))
>
> 2) si cambiaras tu codigo del evento '_afterupdate'... al evento '_exit' de los controles, no obtendrias el mensaje de error... PERO...
> a) el evento '_exit' sucede instantes ANTES de que ocurra el evento [es por eso que se puede 'atrpar']... sin embargo...
> b) el control 'activo'... NO SABE a cual control va a 'pasarle el foco' [ni el que lo reciba sabe de cual 'proviene'] :)) [entonces]...
>
> 3) para poder 'manipular' a cual control le 'concedes' el foco [de manera discrecional, y hasta donde se]...
> a) lo mejor es a traves de un procedimiento 'de verificacion' de las condiciones 'pertinentes' para que el foco se pase a 'X' control
> b) podrias [p.e.] en el codigo del control que ejecute las acciones 'finales', establecer un mecanismo que vaya comprobando...
> 1) si alguno de los controles NO 'cumple' con los requisitos del codigo a ejecutarse... 'mande' el foco al control 'pendiente'
> 2) establecer una 'cadena de condiciones' [p.e. revisando el contenido de los controles 'revisables' y volver al punto anterior -?-
>
> 4) [seguramante] tendras otros controles con 'manejo similar' [al codigo que expusiste desde la consulta original], por lo que...
> sera necesario un re-planteamiento de la secuencia de comprobaciones via procedimientos 'auxiliares'... y algunas otras 'cosillas'
> [p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-
>
> si cualquier duda [o informacion adicional]... comentas ?
> saludos,
> hector.
>
> >> > __ el codigo expuesto __
> >> > > yo tengo el siguiente codigo
> >> > > Private Sub C3_AfterUpdate()
> >> > > If AltaFacturas.C3.Value = "*" Then
> >> > > AltaFacturas.PU3.Locked = True
> >> > > ElseIf AltaFacturas.C3.Value = "-" Then
> >> > > AltaFacturas.C3.Value = ClearContents
> >> > > AltaFacturas.ObsFact.SetFocus <<<<< aqui es donde da el error
> >> > > Else
> >> > > AltaFacturas.PU3.Locked = False
> >> > > Cantidad3 = CDbl(AltaFacturas.C3.Value)
> >> > > Cantidad3 = Round(Cantidad3, 2)
> >> > > AltaFacturas.C3.Value = ClearContents
> >> > > ThisWorkbook.Worksheets("Factura").Range("a16").Value = Cantidad3
> >> > > AltaFacturas.C3.Value = Cantidad3
> >> > > AltaFacturas.I3.Value = Format(ThisWorkbook.Worksheets("Factura").Range("ac16").Value, "#,##0.00")
> >> > > Totales
> >> > > End If
> >> > > End Sub
>
>
>
Respuesta Responder a este mensaje
#9 vm_tapia
20/09/2006 - 23:09 | Informe spam
Hector Miguel:

Podrias darme tu opinion acerca del siguiente codigo
==Private Sub C1_AfterUpdate()
If AltaFacturas.C1.Value = "*" Then
AltaFacturas.PU1.Locked = True
ElseIf AltaFacturas.C1.Value = "" Then
Exit Sub
ElseIf AltaFacturas.C1.Value = "-" Then
Exit Sub
Else
AltaFacturas.PU1.Locked = False
On Error GoTo Errores
Cantidad1 = CDbl(AltaFacturas.C1.Value)
On Error GoTo 0
On Error Resume Next
Cantidad1 = CDbl(AltaFacturas.C1.Value)
Cantidad1 = Round(Cantidad1, 2)
AltaFacturas.C1.Value = ClearContents
ThisWorkbook.Worksheets("Factura").Range("a14").Value = Cantidad1
AltaFacturas.C1.Value = Cantidad1
AltaFacturas.I1.Value =
Format(ThisWorkbook.Worksheets("Factura").Range("ac14").Value, "#,##0.00")
Totales
End If
Exit Sub
Errores:
Select Case Err.Number
Case 13
MsgBox "Solo se aceptan numeros en este campo", vbInformation +
vbOKOnly, " TICSA - Aviso"
AltaFacturas.C1.Value = ClearContents
AltaFacturas.C1.SetFocus
Exit Sub
End Select
Resume
End Sub
Private Sub C1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If AltaFacturas.C1.Value = "-" Then
AltaFacturas.C1.Value = ClearContents
AltaFacturas.ObsFact.SetFocus
End If
End Sub
==
Gracias.

Victor Manuel.


"vm_tapia" wrote:

Hector Miguel:

Discupa el no despedirme adecuadamente en mi respuesta anterior.

Ademas de hacerte una pregunta

¿cual seria tu eleccion del evento a utilizar? ¿AfterUpdate?, ¿Exit?, ¿Change?

a estas alturas del partido ya no se cual utilizar

Gracias por tu apoyo y Saludos.

Victor Manuel.


"vm_tapia" wrote:

> Hector Miguel:
>
> He tomado nota de tus observaciones y me llama la atencion la parte donde
> dices:
>
> > c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control
>
> y te lo menciono porque he intentado "pasar el foco" dentro del mismo Frame
> hacia otro TextBox (todos tienen el evento _AfterUpdate) y asi si funciona,
> el problema esta cuando quiero pasar el foco de un TextBox de un Frame X a
> otro TextBox de otro Frame.
>
> De hecho no utilizo el evento _Exit en estos campos, pero te menciono que de
> acuerdo a tus sugerencia de cambiarlo (punto 2 y 3), SI voy a tener que
> utilizarlo, ya que aqui mi patron, que se le ocurre cada cosa, problema,
> situacion, etc. y me pregunto lo siguiente:
>
> ¿el campo de cantidad solamente acepta NUMEROS? y si ha alguien se le ocurre
> capturar una letra ¿que pasa?
>
> como te daras cuenta, con este tipo de preguntas y comentarios, aumenta la
> problematica en el diseño y programacion.
>
> Otra cosa:
>
> > [p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-
>
> mira despues de la linea ELSE
>
>
>
>
> "Héctor Miguel" wrote:
>
> > hola, vm_tapia !
> >
> > > Tambien ha estado probando con el metodo siguiente
> > > AltaFacturas.Controls("ObsFact").SetFocus
> > > y me aparaece el mismo numero de error ademas del mensjae de que no se encontra el objeto especificado...
> >
> > 1) de acuerdo con la ayuda en linea de vba-excel consultando acerca del evento '_afterupdate', podria comentarte lo siguiente:
> > a) es un evento donde la 'actualizacion' del contenido del control, ocurre SOLO al salir del control
> > b) es [practicamente] 'igual' al evento '_exit', solo que este ultimo puede 'atrapar/evitar/...' la salida del control
> > c) NO se puede 'cancelar' [es decir]... no se puede 'pasarle el foco' a otro control
> > d) la forma en que lo administras [re/modificando su contenido por instrucciones If...ElseIf...] tiene 'efectos de repeticion'
> > e) [y algunas otras consideraciones y detalles mas...] :))
> >
> > 2) si cambiaras tu codigo del evento '_afterupdate'... al evento '_exit' de los controles, no obtendrias el mensaje de error... PERO...
> > a) el evento '_exit' sucede instantes ANTES de que ocurra el evento [es por eso que se puede 'atrpar']... sin embargo...
> > b) el control 'activo'... NO SABE a cual control va a 'pasarle el foco' [ni el que lo reciba sabe de cual 'proviene'] :)) [entonces]...
> >
> > 3) para poder 'manipular' a cual control le 'concedes' el foco [de manera discrecional, y hasta donde se]...
> > a) lo mejor es a traves de un procedimiento 'de verificacion' de las condiciones 'pertinentes' para que el foco se pase a 'X' control
> > b) podrias [p.e.] en el codigo del control que ejecute las acciones 'finales', establecer un mecanismo que vaya comprobando...
> > 1) si alguno de los controles NO 'cumple' con los requisitos del codigo a ejecutarse... 'mande' el foco al control 'pendiente'
> > 2) establecer una 'cadena de condiciones' [p.e. revisando el contenido de los controles 'revisables' y volver al punto anterior -?-
> >
> > 4) [seguramante] tendras otros controles con 'manejo similar' [al codigo que expusiste desde la consulta original], por lo que...
> > sera necesario un re-planteamiento de la secuencia de comprobaciones via procedimientos 'auxiliares'... y algunas otras 'cosillas'
> > [p.e. cuando estableces el PU3.Locked en True... no se ve donde lo regreses a False y es probable que este quedando bloqueado] -?-
> >
> > si cualquier duda [o informacion adicional]... comentas ?
> > saludos,
> > hector.
> >
> > >> > __ el codigo expuesto __
> > >> > > yo tengo el siguiente codigo
> > >> > > Private Sub C3_AfterUpdate()
> > >> > > If AltaFacturas.C3.Value = "*" Then
> > >> > > AltaFacturas.PU3.Locked = True
> > >> > > ElseIf AltaFacturas.C3.Value = "-" Then
> > >> > > AltaFacturas.C3.Value = ClearContents
> > >> > > AltaFacturas.ObsFact.SetFocus <<<<< aqui es donde da el error
> > >> > > Else
> > >> > > AltaFacturas.PU3.Locked = False
> > >> > > Cantidad3 = CDbl(AltaFacturas.C3.Value)
> > >> > > Cantidad3 = Round(Cantidad3, 2)
> > >> > > AltaFacturas.C3.Value = ClearContents
> > >> > > ThisWorkbook.Worksheets("Factura").Range("a16").Value = Cantidad3
> > >> > > AltaFacturas.C3.Value = Cantidad3
> > >> > > AltaFacturas.I3.Value = Format(ThisWorkbook.Worksheets("Factura").Range("ac16").Value, "#,##0.00")
> > >> > > Totales
> > >> > > End If
> > >> > > End Sub
> >
> >
> >
Respuesta Responder a este mensaje
#10 Ivan
20/09/2006 - 23:16 | Informe spam
Hola Victor Manuel

Lo primero disculpa mi torpeza, pero por lo que se ve estaba
equivocado.

En cualquier caso, y ahora por intentar aprender un poco, ¿me podrias
aclarar como usas ClearContents si no es una variable o un
procedimiento? en la ayuda solo la encuentro como metodo para range o
para graficos, y no me parece que sea el caso, aunque mi nivel es bajo
y quizas se me escape algo.

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida