Crear eventos OnClick por código

19/12/2005 - 10:26 por Emilio | Informe spam
Buenos días a a tod@s

A ver si me podéis echar una manita, en Access puedo asignar, por ejemplo al
cargar un formulario, al evento onclick de todas las etiquetas de ese
formulario un código repetitivo, por ejemplo

For Each Etiqueta In Me.Controls
If Left(Etiqueta.Name, 3) = "txt" Then
Etiqueta.OnClick = "=EtiquetaOnClick('" & Etiqueta.Name & "')"
End If
Next Etiqueta

he intentado hacer lo mismo en un UserForm en Excel y me dice (en tiempo de
ejecución) que nones :(
error 438 "El objeto no admite esta propiedad o método"
he tratado de buscar en Google algo pero la verdad es que he agotado mis
recursos, se os ocurre alguna manera alternativa de hacerlo.

Muchas gracias a tod@s

Emilio
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.com/emilio

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/12/2005 - 06:13 | Informe spam
hola, Emilio !

... hubiera preferido no tener que crear el modulo de clase, manias mias
... pretendo exportar el formulario y eso me obliga a exportar el modulo de clase
> ... en Access puedo asignar... al cargar un formulario, al evento onclick de todas las etiquetas... un codigo repetitivo, por ejemplo
> For Each Etiqueta In Me.Controls
> If Left(Etiqueta.Name, 3) = "txt" Then
> Etiqueta.OnClick = "=EtiquetaOnClick('" & Etiqueta.Name & "')"
> End If
> Next Etiqueta
> ... hacer lo mismo en un UserForm en Excel y me dice (en tiempo de ejecucion) que nones :(
> error 438 "El objeto no admite esta propiedad o metodo" [...]





1) la propiedad 'OnClick' que mencionas para algunos controles en formularios de Access...
para controles 'de formularios' en Excel, se convierte en la propiedad 'OnAction' y [hasta donde se]...
-> NO es aplicable para los objetos ActiveX [que son los que se utilizan en los UserForms de VBA] :-(

2) es posible que pudieras 'evitar' el uso de modulos 'de clase' PERO... tratandose de controles ActiveX...
-> tendrias que escribir codigo [repetitivo] en el modulo del formulario para el evento '_click' de 'esos' controles :-(

3) no se que tan frecuente/recurrente/... pudiera ser la necesidad de re/asignar macros a objetos -?-
y/o 'cambiar de procedimientos' [posiblemente de acuerdo a 'otras' circunstancias] antes de mostrar el UserForm -?-
[probablemente] usando el evento '_click' podrias 'direccionar' algunos 'parametros' a una macro 'general'...
y mandar el codigo 'repetitivo' a dicha macro a traves del metodo -> Application.Run "Macro" [parametro1, parametro2, etc.]

-> te paso un ejemplo al fina ;)

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

suponiendo un userform con 2 controles label que 'mandan' a una macro general su nombre y su caption...
en el modulo de codigo del formulario ==Private Sub Label1_Click()
Application.Run "Al_Clicar_Etiquetas", Label1.Name, Label1.Caption
End Sub
Private Sub Label2_Click()
Application.Run "Al_Clicar_Etiquetas", Label2.Name, Label2.Caption
End Sub

y en un modulo de codigo 'normal' ==Option Private Module
Sub Al_Clicar_Etiquetas(ByVal Etiqueta As String, ByVal Mensaje As String)
MsgBox "Se ha cliclado en la etiqueta: " & Etiqueta & vbCr & _
"que contiene: " & Mensaje
End Sub
Respuesta Responder a este mensaje
#2 Emilio
21/12/2005 - 08:49 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Muchas gracias Hector Miguel :-))
en realidad estoy construyendo un calendario en un userform, sin utilizar el
control Calendar, eso implica la necesidad de aplicar el mismo evento on
click a 42 etiquetas, ya lo tengo hecho en access con un unico bucle y
funciona muy bien y en excel mediante el módulo de clase tal como me indicó
KL también funciona muy bien, como os decía el unico contra es de cara a la
exportación, que me obliga a importar a posteriori dos archivos, lo cual es
perfectamente asumible.

Saludos a
Emilio
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.com/emilio


"Héctor Miguel" escribió en el mensaje
news:
hola, Emilio !

> ... hubiera preferido no tener que crear el modulo de clase, manias mias
> ... pretendo exportar el formulario y eso me obliga a exportar el modulo


de clase
>> > ... en Access puedo asignar... al cargar un formulario, al evento


onclick de todas las etiquetas... un codigo repetitivo, por ejemplo
>> > For Each Etiqueta In Me.Controls
>> > If Left(Etiqueta.Name, 3) = "txt" Then
>> > Etiqueta.OnClick = "=EtiquetaOnClick('" & Etiqueta.Name & "')"
>> > End If
>> > Next Etiqueta
>> > ... hacer lo mismo en un UserForm en Excel y me dice (en tiempo de


ejecucion) que nones :(
>> > error 438 "El objeto no admite esta propiedad o metodo"


[...]

1) la propiedad 'OnClick' que mencionas para algunos controles en


formularios de Access...
para controles 'de formularios' en Excel, se convierte en la propiedad


'OnAction' y [hasta donde se]...
-> NO es aplicable para los objetos ActiveX [que son los que se


utilizan en los UserForms de VBA] :-(

2) es posible que pudieras 'evitar' el uso de modulos 'de clase' PERO...


tratandose de controles ActiveX...
-> tendrias que escribir codigo [repetitivo] en el modulo del


formulario para el evento '_click' de 'esos' controles :-(

3) no se que tan frecuente/recurrente/... pudiera ser la necesidad de


re/asignar macros a objetos -?-
y/o 'cambiar de procedimientos' [posiblemente de acuerdo a 'otras'


circunstancias] antes de mostrar el UserForm -?-
[probablemente] usando el evento '_click' podrias 'direccionar'


algunos 'parametros' a una macro 'general'...
y mandar el codigo 'repetitivo' a dicha macro a traves del metodo ->


Application.Run "Macro" [parametro1, parametro2, etc.]

-> te paso un ejemplo al fina ;)

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

suponiendo un userform con 2 controles label que 'mandan' a una macro


general su nombre y su caption...
en el modulo de codigo del formulario ==> Private Sub Label1_Click()
Application.Run "Al_Clicar_Etiquetas", Label1.Name, Label1.Caption
End Sub
Private Sub Label2_Click()
Application.Run "Al_Clicar_Etiquetas", Label2.Name, Label2.Caption
End Sub

y en un modulo de codigo 'normal' ==> Option Private Module
Sub Al_Clicar_Etiquetas(ByVal Etiqueta As String, ByVal Mensaje As String)
MsgBox "Se ha cliclado en la etiqueta: " & Etiqueta & vbCr & _
"que contiene: " & Mensaje
End Sub


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida