Imprimir página | Cerrar ventana

Recorrer controles formulario y modificar controle

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84866
Fecha de impresión: 29/Marzo/2024 a las 07:42


Tema: Recorrer controles formulario y modificar controle
Publicado por: rokoko
Asunto: Recorrer controles formulario y modificar controle
Fecha de publicación: 29/Noviembre/2019 a las 11:25
Hola.
Casi lo tengo pero me da un error que no consigo solucionar, creo que es una tonteria pero no me sale.
Quiero recorrer los controles de un formulario, en este caso los botones y asignales una serie de valores, tipo de letra, color letra, un evento etc...

Igual se puede hacer de una forma mas sencilla, pero yo de momento lo he montado asi.....

Me da el siguiente error  error 91   Variable de objeto o bloque With no establecido

Private Sub Form_Load()

Dim controlesForm As Control
Dim ctl As Control

  For Each controlesForm In Controls
    If (TypeOf controlesForm Is CommandButton) Then
     
      With ctl
          Select Case .ControlType
  
             Case acCommandButton  'Para un boton
               .ForeColor = vbBlue
               .FontName = "Courier"
               .FontSize = 12
               '.Enabled = False
               '.Visible = False  'Dara error si tiene el foco
               .Caption = "ggggg"  'Texto boton
               .OnClick = "=PruebaCC()" 'Asignamos al evento Click la Funcion PruebaCC
      
      
            Case .acLabel  'Para una etiqueta
   
          End Select
     End With
    
End If
Next



End Sub



Respuestas:
Publicado por: mounir
Fecha de publicación: 29/Noviembre/2019 a las 13:15
Hola!

A lo mejor no lo es, pero metes dentro del If que es tipo Boton un label, yo lo haría así:

Dim ctl As Control
For Each ctl in frm.Controls
With ctl
Select Case .ControlType
   Case acCommandButton
     .ForeColor = vbBlue
     .FontName = "Courier"
     .FontSize = 12
    '.Enabled = False
    '.Visible = False 'Dara error si tiene el foco
     .Caption = "ggggg" 'Texto boton
     .OnClick = "=PruebaCC()" 'Asignamos al evento Click la Funcion PruebaCC
    Case .acLabel 'Para una etiqueta

      ' lo que quieras poner
End With
Next ctl


-------------
Un Saludo.


Publicado por: rokoko
Fecha de publicación: 29/Noviembre/2019 a las 13:26
Publicado originalmente por mounir mounir escribió:

Hola!

A lo mejor no lo es, pero metes dentro del If que es tipo Boton un label, yo lo haría así:

Dim ctl As Control
For Each ctl in frm.Controls
With ctl
...............

En mi codigo lo del label no es, lo habia probado y da el mismo error, no es por eso.

Y en tu codigo me da  error de compilacion   End with sin With

En principio parece que esta bien pero sera que no.....


Publicado por: mounir
Fecha de publicación: 29/Noviembre/2019 a las 13:28
Hola!

Perdón, en mi código falta "End Select" antes de "End with".

-------------
Un Saludo.


Publicado por: rokoko
Fecha de publicación: 29/Noviembre/2019 a las 13:31
Publicado originalmente por mounir mounir escribió:

Hola!

Perdón, en mi código falta "End Select" antes de "End with".


Me habia percatado y lo he puesto, pero ahora suelta otro error

marcado en amarillo esta linea
For Each ctl In frm.Controls



Erro 424 en tiempo de ejecucion , se requiere un objeto


Publicado por: rokoko
Fecha de publicación: 29/Noviembre/2019 a las 13:44
Le he añadido esta linea para solucionar el error 424 se requiere un objeto y ahora suelta otro
Dim frm As Form

error 91 variable de objeto o bloque with no establecido






Publicado por: pitxiku
Fecha de publicación: 29/Noviembre/2019 a las 15:09
Te has fijado que en tu código original, hay 2 variables de tipo Control? Que una la usas para asignarle él objeto que hay en la colección Controls, mientras que a la otra, que no has inicializado, la usas para cambiar los valores de las propiedades?


Publicado por: mounir
Fecha de publicación: 29/Noviembre/2019 a las 16:46
Hola!

A ver ahora:-


Dim ctl As Control
For Each ctl In Controls
With ctl
Select Case .ControlType
   Case acCommandButton
    .ForeColor = vbBlue
    .FontName = "Courier"
    .FontSize = 12
    .Enabled = False
'   .Visible = False 'Dara error si tiene el foco
    .Caption = "ggggg" 'Texto boton
    .OnClick = "=PruebaCC()" 'Asignamos al evento Click la Funcion PruebaCC
    Case acLabel 'Para una etiqueta
End Select
      ' lo que quieras poner
End With
Next ctl


-------------
Un Saludo.


Publicado por: rokoko
Fecha de publicación: 29/Noviembre/2019 a las 17:25
Publicado originalmente por pitxiku pitxiku escribió:

Te has fijado que en tu código original, hay 2 variables de tipo Control? Que una la usas para asignarle él objeto que hay en la colección Controls, mientras que a la otra, que no has inicializado, la usas para cambiar los valores de las propiedades?


No la verdad, mas o menos entiendo lo que estaba haciendo.....

Publicado originalmente por mounir mounir escribió:

Hola!
A ver ahora:-


Dim ctl As Control
For Each ctl In Controls
With ctl
Select Case .ControlType
   Case acCommandButton
    .ForeColor = vbBlue
    .FontName = "Courier"
    .FontSize = 12
    .Enabled = False
'   .Visible = False 'Dara error si tiene el foco
    .Caption = "ggggg" 'Texto boton
    .OnClick = "=PruebaCC()" 'Asignamos al evento Click la Funcion PruebaCC
    Case acLabel 'Para una etiqueta
End Select
      ' lo que quieras poner
End With
Next ctl


Ahora si!!!, seguire probando pero parece que funciona bien.....

Saludos


Publicado por: rokoko
Fecha de publicación: 30/Noviembre/2019 a las 19:49
Se puede cerrar el hilo, muchas gracias



Imprimir página | Cerrar ventana