Formulario revelde ¿ sin causa ?

30/03/2010 - 14:00 por Des As Tre | Informe spam
A los buenos días.
Alguien puede decir que bobada estoy haciendo, y de la cual no encuentro la causa?

frmCierreAño es un formulario
mrc2 es un marco en frmCierreAño
Casilla es un control Public


Sub Mostrar_Formulario_Con_Errores()

With frmCierreAño ' Aparto el marco2. Muestro el listbox que llenaré con los errores.

.mrc2.Left = 0

End With

With .lbErr: .Left = mrc2.Width + 1 / 8 * frmCierreAño.Width: .Visible = True: End With

With .etNota: .Left = lbErr.Left: .Top = 6: .Width = lbErr.Width: .Height = : End With

With .etNota: .BackColor = Rojo: .Caption = "Diario con Errores": End With

.cmdVerificar.Visible = False

With .cbImpErr: .BackColor = Rojo: .Visible = True: End With

End With



'*********** Esta parte no funciona ¿ Donde esta mi genialidad?***



' hay: 2 label, 2 Texbox, 2 Commandbutton, 5 optionbutton



For Each Casilla In frmCierreAño.mrc2.Controls

If Casilla.Name = cmdSalir Then

Casilla.Visible = True

Else

Casilla.Visible = False

End If

Next Casilla

'********************************************************



' Este sí funciona


For Each Casilla In frmCierreAño.Controls

If TypeOf Casilla Is MSForms.CheckBox Then

If Casilla.GroupName = "infVerificar" Then Casilla.Visible = True

End If

Next Casilla

End Sub


Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas
.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
30/03/2010 - 21:21 | Informe spam
hola, Des !

Alguien puede decir que bobada estoy haciendo, y de la cual no encuentro la causa?



=> entre tus lineas (y solo de algunas)...

frmCierreAño es un formulario
mrc2 es un marco en frmCierreAño
Casilla es un control Public



=> como, donde y de que tipo declaraste la variable "Casilla" (???)

Sub Mostrar_Formulario_Con_Errores()
With frmCierreAño ' Aparto el marco2. Muestro el listbox que llenaré con los errores.
.mrc2.Left = 0
End With
...



=> despues del "End With" ya no "debiera" funcionar la referencia (terminada) al "frmCierreAño" (del inicio con el "With") -???-
puedes confirmar (o corregir) que las siguientes lineas (With . : End With) funcionan exactamente como lo esperas ?

'*** Esta parte no funciona Donde esta mi genialidad? ***
' hay: 2 label, 2 Texbox, 2 Commandbutton, 5 optionbutton



=> que tiene que ver esta lista de controles con los controles "Casilla" (?)

For Each Casilla In frmCierreAño.mrc2.Controls
If Casilla.Name = cmdSalir Then
...



=> la propiedad <control>.Name toma y devuelve un tipo de datos "String" (entonces...)
- cmdSalir es alguna variable de tipo String ?
- donde y como la declaras y donde y como le asignas su valor (de tipo string) ?

' Este sí funciona
For Each Casilla In frmCierreAño.Controls
If TypeOf Casilla Is MSForms.CheckBox Then
If Casilla.GroupName = "infVerificar" Then Casilla.Visible = True
End If
Next Casilla
End Sub



=> sin comentarios :))

saludos,
hector.
Respuesta Responder a este mensaje
#2 Des As Tre
03/04/2010 - 20:45 | Informe spam
Hola Héctor. Gracias.
Me he perdido un poco.
Reenvío el original, centrándome en lo que no funciona modificando ligeramente la descripción y
poniendo algo entre tus limeas

Casilla es un control Public
frmCierreAño es un formulario Contiene a: mrc2 y otros 24 controles ( Y alguno que añadiré )
mrc2 es un marco y contiene : 2 label, 2 Texbox, 2 Commandbutton, 5 optionbutton,

lo que pretendo, y no consigo con este código, es que deje visible un Commandbutton que tiene como
propiedad Name= cmdSalir y todos los demás los pase a No Visibles

Sub Mostrar_Formulario_Con_Errores() 'Parte que no funciona
For Each Casilla In frmCierreAño.mrc2.Controls
If Casilla.Name = cmdSalir Then
Casilla.Visible = True
Else
Casilla.Visible = False
End If
Next Casilla
End Sub

Cual es la metedura de pata?
Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas



> frmCierreAño es un formulario
> mrc2 es un marco en frmCierreAño
> Casilla es un control Public

=> como, donde y de que tipo declaraste la variable "Casilla" (???)


Casilla es un Control Public


> Sub Mostrar_Formulario_Con_Errores()
> With frmCierreAño ' Aparto el marco2. Muestro el listbox que llenaré con los errores.
> .mrc2.Left = 0
> End With
> ...

=> despues del "End With" ya no "debiera" funcionar la referencia (terminada) al "frmCierreAño"


(del inicio con el "With") -???-
es lógico
puedes confirmar (o corregir) que las siguientes lineas (With . : End With) funcionan


exactamente como lo esperas ?
Funcionan.

=> que tiene que ver esta lista de controles con los controles "Casilla" (?)


Casilla es un control que se compara con cada uno de los que existen para ver si su "Name" es
cmdSalir. Si fuera así le deja visible y oculta a los demas

> For Each Casilla In frmCierreAño.mrc2.Controls
> If Casilla.Name = cmdSalir Then
> ...

=> la propiedad <control>.Name toma y devuelve un tipo de datos "String" (entonces...)
- cmdSalir es alguna variable de tipo String ?


Debe ser String, por que es la propiedad Name de un Commandbutton.
- donde y como la declaras y donde y como le asignas su valor (de tipo string) ?


declarada en tiempo de diseño como las que vienen a continuación.

> ' Este sí funciona
> For Each Casilla In frmCierreAño.Controls
> If TypeOf Casilla Is MSForms.CheckBox Then
> If Casilla.GroupName = "infVerificar" Then Casilla.Visible = True
> End If
> Next Casilla
> End Sub

=> sin comentarios :))


¿No esta bien el código?



Saludos
Des
Respuesta Responder a este mensaje
#3 Héctor Miguel
03/04/2010 - 23:30 | Informe spam
hola, Des !

lo que pretendo, y no consigo con este codigo, es que deje visible un Commandbutton
que tiene como propiedad Name= cmdSalir y todos los demas los pase a No Visibles
Sub Mostrar_Formulario_Con_Errores() ' Parte que no funciona
For Each Casilla In frmCierreAño.mrc2.Controls
If Casilla.Name = cmdSalir Then
Casilla.Visible = True
Else
Casilla.Visible = False
End If
Next Casilla
End Sub
Cual es la metedura de pata?



analiza la siguiente propuesta y... (comentas tus conclusiones ?)

saludos,
hector.

op1: en el modulo de codigo del formulario...
Dim Casilla As MSForms.Control
Private Sub UserForm_Initialize()
For Each Casilla In Me.mrc2.Controls
Casilla.Visible = False
Next
cmdSalir.Visible = True
End Sub

op2: en un modulo de codigo estandar...
Sub Mostrar_Formulario_Con_Errores()
Dim Casilla As MSForms.Control
With frmCierreAño
For Each Casilla In .mrc2.Controls
Casilla.Visible = True
Next
cmdSalir.Visible = True
End With
End Sub
Respuesta Responder a este mensaje
#4 Des As Tre
05/04/2010 - 17:41 | Informe spam
Hola grupo.Es la segunda respuesta que pongo, pero como no la veo la reenvio. Disculpad si la teneis

Hola Héctor. Gracias.
A primera vista se ve que lo que propones va a funcionar.
Supongo, por el tipo de respuesta que me das, que has probado lo que hice.
Lo que no entiendo es porque no funciona y no solo eso, sino que sin mensaje de error finiquita el
bucle
y todas las instrucciones antes del End Sub.
¿Has podido ver el por qué ?
un par de preguntas mas
¿Por que si declaro Public Casilla cuando pongo As, y tecleo con, me da dos opciones de Control y si
pongo Public Casilla as MsForms.co , me da una sola opción de control?

Además las pruebas han generado un error general de Excel que veré si consigo corregir. No se de
donde
viene..

Saludos
José Luís Ferreras No imprimas, ganemos un árbol... o tres hojinas
.
De: "Héctor Miguel"
Grupos de noticias: microsoft.public.es.excel
Enviado: sábado, 03 de abril de 2010 23:30
Asunto: Re: Formulario revelde ¿ sin causa ?


hola, Des !

> lo que pretendo, y no consigo con este codigo, es que deje visible un Commandbutton
> que tiene como propiedad Name= cmdSalir y todos los demas los pase a No Visibles
> Sub Mostrar_Formulario_Con_Errores() ' Parte que no funciona
> For Each Casilla In frmCierreAño.mrc2.Controls
> If Casilla.Name = cmdSalir Then
> Casilla.Visible = True
> Else
> Casilla.Visible = False
> End If
> Next Casilla
> End Sub
> Cual es la metedura de pata?

analiza la siguiente propuesta y... (comentas tus conclusiones ?)

saludos,
hector.

op1: en el modulo de codigo del formulario...
Dim Casilla As MSForms.Control
Private Sub UserForm_Initialize()
For Each Casilla In Me.mrc2.Controls
Casilla.Visible = False
Next
cmdSalir.Visible = True
End Sub

op2: en un modulo de codigo estandar...
Sub Mostrar_Formulario_Con_Errores()
Dim Casilla As MSForms.Control
With frmCierreAño
For Each Casilla In .mrc2.Controls
Casilla.Visible = True
Next
cmdSalir.Visible = True
End With
End Sub
Respuesta Responder a este mensaje
#5 Héctor Miguel
06/04/2010 - 05:15 | Informe spam
hola, Des !

me equivoco ?... o es la primera vez que "te atreves a exponer tu nombre" ?

Supongo, por el tipo de respuesta que me das, que has probado lo que hice.



(efectivamente) :D supongo que (com)probaste dos "errores" en la segunda propuesta (?)

Lo que no entiendo es porque no funciona y no solo eso, sino que sin mensaje de error finiquita el bucle
y todas las instrucciones antes del End Sub.
Has podido ver el por que ?



no es que "no funciona"... es que recorre todo el bucle "SIN encontrar lo que busca" (no funciona "como esperabas" ?)
del codigo que comentas como que no funciona, podrias probar si cambias esta parte (especificamente):
> If Casilla.Name = cmdSalir Then




por algo +/- asi: If Casilla.Name = cmdSalir.Name Then

incluso, podrias reducir en el bucle la estructura If ... End If (con algo +/- asi):
For Each Casilla In frmCierreAño.mrc2.Controls
Casilla.Visible = Casilla.Name = cmdSalir.Name
Next

un par de preguntas mas
Por que si declaro Public Casilla cuando pongo As, y tecleo con, me da dos opciones de Control
y si pongo Public Casilla as MsForms.co, me da una sola opcion de control?



las opciones que muestra la tecnologia "intelisense" dependen:
- de las librerias a las que hace referencia el proyecto de macros
- y en el orden de sus "precedentes" (primero las "basicas" de vba, y despues las del "pariente" de la variable/control)

Además las pruebas han generado un error general de Excel que veré si consigo corregir. No se de donde viene...



(creo que) de esta parte, la pelota sigue en tu cancha (?)

saludos,
hector.

__ previos __
hola, Des !

> lo que pretendo, y no consigo con este codigo, es que deje visible un Commandbutton
> que tiene como propiedad Name= cmdSalir y todos los demas los pase a No Visibles
> Sub Mostrar_Formulario_Con_Errores() ' Parte que no funciona
> For Each Casilla In frmCierreAño.mrc2.Controls
> If Casilla.Name = cmdSalir Then
> Casilla.Visible = True
> Else
> Casilla.Visible = False
> End If
> Next Casilla
> End Sub
> Cual es la metedura de pata?

analiza la siguiente propuesta y... (comentas tus conclusiones ?)

saludos,
hector.

op1: en el modulo de codigo del formulario...
Dim Casilla As MSForms.Control
Private Sub UserForm_Initialize()
For Each Casilla In Me.mrc2.Controls
Casilla.Visible = False
Next
cmdSalir.Visible = True
End Sub

op2: en un modulo de codigo estandar...
Sub Mostrar_Formulario_Con_Errores()
Dim Casilla As MSForms.Control
With frmCierreAño
For Each Casilla In .mrc2.Controls
Casilla.Visible = True
Next
cmdSalir.Visible = True
End With
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida