border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 09-12-2007, 18:38:10
Un Nuevo Amigo
 
Registrado: dic 2007
Posts: 6
JMER Valoración +2
Predeterminado usser forrm

Hola np soy muy esperto en esto de los modulos magrso usser for la verdad no me entero mucho
tengo un problema ahber si algien me puede ayudar
He creado un usser form y cuando en la celda J2 ponga SI quiero que salga el usser for por mas qeu lo intento no lo consigo
haber si me podeis ayudar gracias
Responder Con Cita
  #2 (permalink)  
Antiguo 09-12-2007, 22:07:15
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
IvanArt Valoración +2
Predeterminado Re: usser forrm

hola,


Cita:
Empezado por JMER
Hola np soy muy esperto en esto de los modulos magrso usser for la verdad no me entero mucho
tengo un problema ahber si algien me puede ayudar
He creado un usser form y cuando en la celda J2 ponga SI quiero que salga el usser for por mas qeu lo intento no lo consigo
haber si me podeis ayudar gracias

disculpame, pero lo complicado es entender tu mensaje. Supongo que tu lengua no es el castellano, con lo que seria normal, pero si si lo es, desde luego yo que tu mandaba revisar el teclado o intentaba fijarme en la direccion de los dedos al teclear.

bueno, bromas aparte, prueba a ver si te vale algo asi:

estando en la hoja del 'J2' donde quieres que al escribir 'Si' salga el userform haz click secundario en la pestaña de la hoja =>
'Ver codigo' => en la hoja/modulo que se te habra abierto copia/pega el siguiente codigo (OJO: si tu formulario no se llama 'UserForm1 cambia esto en el codigo por el nombre de tu formulario)

Código:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [j2]) Is Nothing And _
    UCase(Target) = "SI" Then UserForm1.Show
End Sub
al escribir Si y salir de la celda (pej. con intro, tab, mouse, etc...) deberia aparecerte el formulario

si quieres prueba y comentas

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Responder Con Cita
  #3 (permalink)  
Antiguo 10-12-2007, 16:19:19
Un Nuevo Amigo
 
Registrado: dic 2007
Posts: 6
JMER Valoración +2
Predeterminado

Hola IvanArt en primer lugar pedirte disculpas por las letras pero reconozco que soy muy torpe.
Lo que me has mandado lo he pegado en un modulo de insertar modulo y lo he pegado pero no me ha funcionado
lo he pegado en el codigo de la hoja y meda error 13
muchas gracias por interesarte lo segire intentando
un saludo muy cordial
Responder Con Cita
  #4 (permalink)  
Antiguo 10-12-2007, 21:32:38
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
IvanArt Valoración +2
Predeterminado

hola de nuevo,

Cita:
Empezado por JMER
...pedirte disculpas por las letras pero reconozco que soy muy torpe.
no te preocupes, yo tambien lo soy. Tan solo era una broma por el empellon inicial del mensaje

Cita:
lo he pegado en un modulo de insertar modulo y lo he pegado pero no me ha funcionado
al tratarse de un evento de la propia hoja de calculo debe ir en el modulo de la hoja

Cita:
lo he pegado en el codigo de la hoja y meda error 13
si lo has pegado correctamente no deberia darte error. Si quieres haz esta [sencillisima] prueba:


editado: disculpame pero tenias razon. no me habia dado cuenta de la posibilidad de seleccion de rangoss multiples o de varias celdas.

si quieres prueba esta modificacion del codigo y a ver que tal


Código:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  If Target.Row = 2 And Target.Column = 10 And _
    UCase(CStr(Target)) = "SI" Then UserForm1.Show
End Sub
aunque lo que sigue a lo mejor ya no te hace falta, ya que esta lo dejo por si quieres probarlo

fin edicion


crea un nuevo libro (mejor cierra 1º todos los que tengas abiertos[. Una vez creado y sin modificar nada, ve al editor de vba (Alt+F11)

una vez en el editor inserta un userform (ya sabes => insertar=>Userform)

una vez insertado dejalo tal cual (no le cambies el nombre por lo menos) y ve al explorador de proyectos (si esta cerrado pulsa Ctrl+R) => selecciona en el proyecto del libro la hoja1 y dale a F7 para que se te abra su modulo de codigo

en este modulo pega el codigo que te he puesto y fijate bien que quede exactamente igual que se ve en el foro, (incluido el espacio mas el guion bajo detras de And)

dale a Alt+F11 para volver a excel

en la hoja 1 prueba a escribir Si en la celda J2 (prueba tambien escribiendo otras cosas y/o en otras celdas)

[si quieres] si te sigue dando error comentas (y si no tambien para buscar el motivo del otro)

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Responder Con Cita
  #5 (permalink)  
Antiguo 11-12-2007, 20:01:32
Junior Member
Site Admin
 
Registrado: nov 2007
Posts: 16
jogan Valoración +2
Predeterminado

Hola amigos:

Bueno JMER, yo he copiado el código que ha pasado Ivanart y a mi si me funciona. Al poner (si) en J2 me aparece el formulario. A ver si es que no lo has pegado en el código de la hoja como te señala.

Saludos
Responder Con Cita
  #6 (permalink)  
Antiguo 11-12-2007, 22:00:03
Junior Member
Site Admin
 
Registrado: nov 2007
Posts: 16
jogan Valoración +2
Predeterminado

Bueno JMER, experimentando se me ha ocurrido hacerlo con una variable:

Option Explicit
Dim Nombre As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Nombre = "si"
If Range("J2") = Nombre Then UserForm1.Show
Range("J2").Clear
End Sub

Así desde luego funciona, lo único que como no sabía como interrumpir la aparición del UserForm, he tenido que meterle la expresión Clear que no creo que sea la más adecuada.
A ver si el amigo Ivanart se anima y perfecciona este módulo. De todas formas pruébalo porque funciona.

Saludos
Responder Con Cita
  #7 (permalink)  
Antiguo 12-12-2007, 13:48:29
Junior Member
Site Admin
 
Registrado: nov 2007
Posts: 16
jogan Valoración +2
Predeterminado

Ahora si, cambiando el procedimiento SelectionChange por Change "a secas" funcina perfectamente.
Ya me dirás si lo pruebas.

Option Explicit
Dim Nombre As String

Private Sub Worksheet_Change(ByVal Target As Range)
Nombre = "si"
If Range("J2") = Nombre Then UserForm1.Show
End Sub

'Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'End Sub

No obstante, he de reconocer que el código de Ivanart funciona mejor. El mio si le pones el sí con mayúsculas, no las lee

Saludos
Responder Con Cita
  #8 (permalink)  
Antiguo 13-12-2007, 17:53:51
Un Nuevo Amigo
 
Registrado: dic 2007
Posts: 6
JMER Valoración +2
Predeterminado

Hola IvanArt bueno te cuento
El codigo que me dijiste lo he provado en un libro nuevo y funciona perfectamente
Donde esta el fallo?
Lo encontre el que en la celda J2 pone Si pero es cuando 5 celdas estn llenas con la condicionate Si y cundo lo he privado en el libro nuevo la primera vez funciona pero luego me borra la formula condicionl Si .
Entoncs he llegadoa la conclusion de dejarlo como esta y cuando las 5 celdas estan llenas y me sale el carte TA PUEDES IMPRIMIR pues pulsar atchivo imprimir y ya esta.
De todas formas IvanArt ucahs gracias por tu ayuda he interes
un saludo muy cordial Jose
si decida cambiarlo ya te lo dire
Responder Con Cita
  #9 (permalink)  
Antiguo 13-12-2007, 20:50:17
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
IvanArt Valoración +2
Predeterminado

hola chjcos,

solo un par de comentarios:

para Jose y de nuevo solo como orientacion (aunque realmente no sea quien para orientar a nadie)=>

Cita:
experimentando se me ha ocurrido hacerlo con una variable:

Código:
Option Explicit 
Dim Nombre As String 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Nombre = "si" 
If Range("J2") = Nombre Then UserForm1.Show 
Range("J2").Clear 
End Sub
me alegro que te animes a experimentar, creo que es la unica forma de aprender. Esto aparte te comento mi opinion sobre el uso de la variable en este caso:

si te fijas en tu propio codigo, realmente esto =>

Nombre = "si"
If Range("J2") = Nombre Then UserForm1.Show


es, en cuanto al objetivo buscado y al resultado obtenido, exactamente igual a esto otro=>

If Range("J2") ="si" Then UserForm1.Show

teniendo en cuenta que las variables ocupan/reservan un espacio de memoria y que lo ideal para [casi] cualquier aplicacion es intentar ser lo mas 'ligera' posible para facilitar y agilizar la ejecucion de sus tareas, lo normal, tanto con las variables como con cualquier otro recurso, es no utilizarlo si no es necesario o sirve para mejorar el rendimiento u otros casos.

en el caso de las variables, cuando realmente no van a 'variar', su uso se hace innecesario. En todo caso, podriamos utilizar una constante, dado que el valor buscado va a ser siempre el mismo (Si) y que ademas no consume recursos

a esto añadele que:=>

.- cuanto mayor es el alcance de una variable (procedimiento < modulo, private < public, ...) mayor tiempo esta consumiendo recursos,

.- [ aunque de esto no estoy 100x100 seguro] en el caso de que este a nivel del modulo de una hoja una vez inicializada la variable se mantendra toda la sesion consumiendo recursos hasta cerrar el libro

.- el declarar una variable fuera de un procedimiento suele tener sentido porque queramos disponer de ella en diversos procedimientos (o en el mismo pero en diferentes momentos) teniendo acceso a su ultimo valor asignado aunque el procedimiento que la modifico por ultima vez ya haya concluido

(digamos que una variable declarada dentro de un procedimiento Sub o Function muere/se extingue con el propio procedimiento, mientras que al declararla a nivel de modulo, si el modulo es de objeto sera accesible para los procedimientos de ese modulo hasta que el objeto propietario de ese modulo se descargue. Finalmente, para declarar una variable accesible desde cualquier procedimiento de cualquier modulo de un proyecto debe hacerse en un modulo NORMAL y declararla como Public)


Cita:
"como no sabía como interrumpir la aparición del UserForm, he tenido que meterle la expresión Clear que no creo que sea la más adecuada."
en realidad, y esto enlaza con el siguiente codigo que expones, no se trata de 'interrumpir' la aparicion del formulario, sino de no mostrarlo mas que cuando nosotros hayamos decidido Aunque parece una obviedad, cuando de eventos hablamos quizas no lo sea tanto

ten en cuenta que los eventos son un tipo de procedimientos que se ejecutan SIEMPRE (salvo que los inhabilitemos en caso de poderse) que 'SUCEDE' la 'accion' que lo desencadena. Esto quiere decir que si el codigo que introduzcamos en el evento provoca que 'suceda' la accion desencadenante del evento, y salvo que tomemos las debidas precauciones, se puede entrar en un bucle infinito

y en el caso de los eventos de hoja (al menos Change y SelectioChange) se disparan siempre que el suceso correspondiente (cambiar algo para Change y cambiar la seleccion para SelectionChange) se produce en cualquier parte/celda/rango de la hoja

para limitar la ejecucion de nuestras instrucciones a las ocasiones que deseemos (pej. que solo se ejecuten cuando el cambio se realiza en una determinada celda) estos 2 eventos exponen/proporcionan el parametro Target, que hace referencia a la celda/rango en la que esta 'sucediendo' el desencadenante del evento (es decir, para Change la celda en que se realiza el cambio).

asi, pej. para Change, podemos comparar si Target (celda modificada) es la (o una de las) celda que a nosotros nos interesa=>

If Target.Address = "J2" then .... y realizar las acciones solo si este es el caso, o =>

If Target.Address <> "J2" then Exit sub => si no es el caso salimos sin ejecutar las acciones

esta es solo una forma de condicionar el codigo, existen muchas otras, pero en general, casi siempre que usemos procedimientos de evento, debemos condicionar la ejecucion de nuestro codigo a solo las circunstancias requeridas, si no queremos correr el riesgo de llevarnos mas de un disgusto

de todas formas los eventos son muy suyos y, al menos en mi caso, conseguir conocerlos a fondo (si es que es posible) lleva su tiempo y sus tropiezos

Cita:
"... si le pones el sí con mayúsculas, no las lee"
echale un ojo en la ayuda a las funciones UCase y LCase

bueno, disculpad el rollo, pero solo por si ayuda a ir entendiendo mejor este tingaldo (OJO: no me hagais caso del todo y en cualquier caso intentad contrastarlo por si acaso)

en cuanto a JMER, si ya has decidido como hacerlo pues bienvenido sea, aunque me da la impresion, por tu ultimo mensaje, que, o hay algo que no has acabado de exponer o que no has expuesto correctamente, o que quizas has hecho un poutpourri con el/los codigos de Jose y el/los mios. Pero bueno, lo dicho, me alegro que al menos puedas tirar y lamento no haberte podido ser de mas ayuda

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Responder Con Cita
  #10 (permalink)  
Antiguo 14-12-2007, 16:46:24
Junior Member
Site Admin
 
Registrado: nov 2007
Posts: 16
jogan Valoración +2
Predeterminado

Hola IvanArt:

Te agradezco la lección. Tienes razón, he probado con la función UCASE y es lo más adecuado. Además, está claro que en el caso que expone (como puede) JMER es innecesaria una variable. Lo propuse como "experimento" pero incluso aún funcionando bien, hubiera sido una tonteria utilizar una variable para esto. Bueno la cuestión como ves, es que ando "trasteando" con el editor de VBA a ver si le saco chispas...

Recibe un saludo.
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT. Ahora son las 17:00:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right