** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - RUN PROCEDIMIENTO
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRUN PROCEDIMIENTO

 Responder Responder
Autor
Mensaje
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Tema: RUN PROCEDIMIENTO
    Enviado: 13/Febrero/2019 a las 19:06
Hola,

Estoy intentando ejecutar un procedimiento sub cuyo nombre está almacenado en una variable string. Para ello quiero utilizar RUN

En un formulario ...
--------------------------------
Private Sub Lista0_DblClick(Cancel As Integer)

    Dim str As String: str = "hola"   
    Application.Run str

End Sub
--------------------------------
Sub hola()
MsgBox "hola"
End Sub
--------------------------------
Me arroja el siguiente error:" Aplicacion no encuentra el procedimiento 'hola'. Error nº 2517". En el objeto: database"

Según la documentación de RUN, yo creo, que está bien escrito, pero por lo que se ve no lo debe estar.
¿Alguien podría decirme cuál es el error?.

Muchas gracias

Saludos

Sintaxis

expresión. Run( _Procedure_, _Arg1_, _Arg2_, _Arg3_, _Arg4_, _Arg5_, _Arg6_, _Arg7_, _Arg8_, _Arg9_, _Arg10_, _Arg11_, _Arg12_, _Arg13_, _Arg14_, _Arg15_, _Arg16_, _Arg17_, _Arg18_, _Arg19_, _Arg20_, _Arg21_, _Arg22_, _Arg23_, _Arg24_, _Arg25_, _Arg26_, _Arg27_, _Arg28_, _Arg29_, _Arg30_ )

Parámetros

Nombre Obligatorio/opcional Tipo de datos Descripción
Macro Opcional Variant Macro que ejecutar. Esto puede ser una cadena con el nombre de la macro, un objeto Range que indica dónde está la función o un identificador de registro para una función de DLL (XLL) registrada. Si se usa una cadena, la cadena se evaluará en el contexto de la hoja activa.
Arg1-Arg30



Editado por pepepot - 13/Febrero/2019 a las 19:26
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Enlace directo a este mensaje Enviado: 13/Febrero/2019 a las 19:56
La función que quieres ejecutar (hola), debe ser pública y estar en un módulo estándar
Arriba
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Enviado: 14/Febrero/2019 a las 08:45
Pues sí, así sí funciona, GRACIAS.
Pero entonces no me sirve para lo que pretendía hacer.

¿Cuál sería entonces la manera de llamar a un procedimiento de un subformulario desde el formulario?
Es decir, tengo un formulario con un listbox, y un subformulario que tiene varios botones para realizar diferentes acciones. Necesito que al hacer dobleclic en el listbox me ejecute el clic del uno de los botones.
La compliación radica en que la lista es dinámica, es decir, muestro en ella no siempre lo mismo le cambio en tiempo de ejecución el ROWSOURCE y al cambiar el ROWSOURCE también cambio/almaceno en una variable el nombre del botón que debe ejecutar al hacer doble clic en el listbox

Por ejemplo, digamos que en la lista muestro clientes, quiero que al hacer doble clic en la lista ejecute el botón [Editar] que está en el subformulario, si cambio el contenido de la lista, por ejemplo a facturas que al hacer doble clic en la lista me ejecute el botón [Imprimir]
No sé si me he explicado

Diréis entonces, por qué no le das directamente al botón y listo?...la respuesta es por manejabilidad, es más rápido si al hacer doble clic ya ejecuta el botón que le corresponda en cada caso. Si no hay que selecciónar el registro en el listbox y luego ir a pulsar el ratón. Parece una tontería pero cuando tienes que hacerlo muchas veces esas cosas se agradecen.



Editado por pepepot - 14/Febrero/2019 a las 08:56
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3117
Enlace directo a este mensaje Enviado: 14/Febrero/2019 a las 09:08
Hola.
Esa sería otra pregunta, pero en general se llama con algo parecido a:

Me.nombrecontrolsubformulario.Form.Comando30_Click

Eso sí, el procedimiento del subformulario, en este ejemplo Comando30_Click,  tiene que estar declarado como público.
Espero que ayude a resolver la duda
Ya comentas.
Un saludo a todos
Arriba
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Enviado: 14/Febrero/2019 a las 09:17
Prga, como dices sería si es siempre el mismo botón el que se tiene que ejecutar, pero a priori no sé qué botón va a ser, depende de lo que haya en cada momento en el listbox y cuando cambio el contenido del listbox es cuando lo sé.
Es decir, NO puedo hacer lo siguiente...
Dim nombreboton as string
nombreboton = "botón1"
y ejecutar
Me.nombrecontrolsubformulario.Form. & nombreboton & "_Click"
(es una aberración, ya lo sé)




Editado por pepepot - 14/Febrero/2019 a las 09:18
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Enlace directo a este mensaje Enviado: 14/Febrero/2019 a las 14:33
Entiendo que en la lista cargas algo que indica que botón hay que "pulsar". Y en el subformulario tienes siempre los mismos botones.

Si es asi, puedes crear una función pública en el subformulario con un parámetro. La lista llamará a la función pasandole el valor que cargas dinámicamente. Y la función, dependiendo e ese dato, llamara a un botón u otro.

Otra posibilidad (sin probar), es intentar usar Eval con el nombre del evento:

Eval("Call Forms!... " & Lista.Column(...))
Arriba
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Enviado: 14/Febrero/2019 a las 14:37
ClapLa primera opción me ha valido.
Muchas gracias.
Se puede cerrar el hilo.
Saludos a todos
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable