** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Macro para modificar parámetro general de tabla
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoMacro para modificar parámetro general de tabla

 Responder Responder
Autor
Mensaje
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Tema: Macro para modificar parámetro general de tabla
    Enviado: 02/Noviembre/2020 a las 13:54
Hola,

Agradecería que me pudiesen ayudar con la siguiente duda.

Tengo una consulta del tipo Crear Tabla, en esta nueva tabla la característica "Indexado" se establece por defecto en "No". Esto ocasiona que no pueda editar algunas de las consultas relacionadas con la tabla que se ha creado recién, por lo que debo modificar de forma manual el estado de "Indexado" a "Sí (sin duplicados)", a partir de lo cual todo funciona perfectamente. 

La consulta del tipo Crear Tabla se ejecuta a través de una macro asociada a un botón de comando en un formulario, por lo que sería bastante conveniente agregar una macro a continuación que genere el cambio. Sin embargo no soy capaz de encontrar esta opción en el catálogo de macros al que se accede desde la Hoja de Propiedades de diseño.

Si no fuese posible realizar la acción desde el catálogo de macros, podría intentar hacerlo mediante el generador de códigos, pero no sabría por dónde empezar porque mis conocimientos de VBA son más aplicados a Excel.

Gracias de antemano por la ayuda.

Un saludo.

José.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 02/Noviembre/2020 a las 14:58
Yo juraría que directamente no se puede crear un índice desde una macro  ... ahora vendrá alguien y pondrá la solución.

Puedes hacerlo con VBA. Si lo sabes hacer con Excel, lo sabes hacer con Access.
Aunque las mismas instrucciones SQL las puedes lanzar desde una consulta de "Definición de datos".

Las instrucciones para crear un índice son:

CurrentDb.execute "CREATE INDEX IndiceUno ON MiTabla (Campo1)"
CurrentDb.Execute "CREATE UNIQUE INDEX IndiceUno ON MiTabla (Campo1) WITH PRIMARY"






Editado por Mihura - 02/Noviembre/2020 a las 14:59
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 02/Noviembre/2020 a las 15:41
Hola, creo que como dice Mihura, desde una macro directamente no se puede, pero para usar el código VBA desde una macro, existe una acción en las macros que es "Ejecutar Código".

Deberás crear una función en VBA que cree el índice y llamar a esa función desde tu macro usando esa acción

El saber no ocupa lugar, sólo tiempo
Arriba
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 15:57

  Mihura, 

  Muchas gracias por tu respuesta. Si bien el lenguaje de programación es el mismo para Excel y para Access, no tengo experiencia usándolo con este último programa, por lo que me surgen muchas más dudas.

  De acuerdo a tu indicación, creo que el código completo sería simplemente el siguiente:

  Sub AddPrimaryIndex()

  CurrentDb.Execute "CREATE UNIQUE INDEX PreCodInt ON #T_Vigente_Pre (PreCodInt) WITH PRIMARY"

  End Sub

  No obstante, cuando lo echo a andar obtengo el error "Se ha producido el error '3291' en el tiempo de ejecución: Error de sintaxis en la instrucción CREATE INDEX" He revisado el código para comprobar que no tenga ningún fallo de escritura, pero no encuentro el problema, seguramente será algo súper sencillo que estoy viendo.

  ¿Sabrían qué podría ser?

  Gracias

  Un saludo.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 16:03
Apostaría un sugus de piña que el # no le gusta ni un pelo. Wink

¿ No me irás a decir que has llamado una tabla #T_Vigente_Pre ?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 16:22
Mihura,

Te has ganado el sugus de piña, he retirado el símbolo # del nombre de la tabla y ahora funciona correctamente, muchas gracias por la ayuda.

Sólo una última consulta, para ejecutar este módulo desde el panel de Macros (el que por ejemplo se abre en Hoja de Propiedades > Eventos > Al hacer Clic > Macro Incrustada), selecciono EjecutarCódigo y en nombre de la función ingreso en mi caso AddPrimaryIndex(), pero también ahora me da error "La expresión que ha especificado contiene un nombre de función que Microsoft Access no encuentra"

¿Cómo podría llamar al módulo para que sea ejecutado después de las macros asociadas al evento? Disculpen si la pregunta es muy elemental.

Gracias nuevamente por la atención.

Un saludo.
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 17:05
Publicado originalmente por Jose PV Jose PV escribió:

Sólo una última consulta, para ejecutar este módulo desde el panel de Macros (el que por ejemplo se abre en Hoja de Propiedades > Eventos > Al hacer Clic > Macro Incrustada), selecciono EjecutarCódigo y en nombre de la función ingreso en mi caso AddPrimaryIndex(), pero también ahora me da error "La expresión que ha especificado contiene un nombre de función que Microsoft Access no encuentra"

Para que Access ejecute el código desde una macro, este debe estar declarado como Function

Function AddPrimaryIndex()
...
End Function 

a partir de ahí, puedes lanzarlo desde una macro con el comando EjecutarCódigo, o bien directamente desde la propiedad del evento que sea. (En ese segundo caso, deberás poner un sigo de igual delante)
Hoja de Propiedades > Eventos > Al hacer Clic > = AddPrimaryIndex()

Creo que si no se declara el alcance, son publicas, pero por si acaso declarala
Public Function AddPrimaryIndex()
...
End Function 




Editado por Dabellaso - 18/Noviembre/2020 a las 17:08
El saber no ocupa lugar, sólo tiempo
Arriba
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 18:39
Dabellaso,

Gracias por tu respuesta.

He configurado todo como indicas, ahora el comando EjecutarCódigo sí reconoce la función, pero me sigue dando un error que hace que no se ejecute "La expresión que ha especificado tiene un nombre de función que Microsoft Access no encuentra"

Dejo tres pantallazos del proceso, por si se entiende mejor.

https://ibb.co/pjFsNYL
https://ibb.co/VYshVNm
https://ibb.co/6NGjtW0

Gracias de antemano por la ayuda

Un saludo.
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 18:54
Quizás me equivoqué y ese necesario poner la función con el signo igual delante también en las macros

prueba con "AddPrimaryIndex()" en la acción de "ejecutar código"

He probado y el signo igual no es necesario

Otra razón por la que puede darte ese error, es que escribieras la función dentro del módulo del formulario, escríbela dentro de un módulo normal


Editado por Dabellaso - 18/Noviembre/2020 a las 19:07
El saber no ocupa lugar, sólo tiempo
Arriba
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 19:04
Dabellaso

Creo que no es eso, ya había probado anteponiendo "=" y obtengo el mismo error...

Voy a seguir investigando
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 19:11
perdón edité mientras respondías

Otra razón por la que puede darte ese error, es que escribieras la función dentro del módulo del formulario, escríbela dentro de un módulo normal. (Olvida esto, viendo las capturas, la función está bien en un modulo general que es el apropiado)

Para asegurarte de que la función se ejecuta pon un punto de interrupción dentro del código o un Stop para confirmar que no se ejecutó y que el problema está ahí.

Me pareció ver que las consultas que abres con la macro y las que indicas en VBA tienen nombres diferentes...



Editado por Dabellaso - 18/Noviembre/2020 a las 19:15
El saber no ocupa lugar, sólo tiempo
Arriba
Jose PV Ver desplegable
Nuevo
Nuevo


Unido: 03/Febrero/2020
Localización: Chile
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 18/Noviembre/2020 a las 19:15
Ya he encontrado el problema, el módulo se llamaba igual que la función, y según lo indicado aquí https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/runcode-macro-action, no se puede llamar a una función desde una macro si el módulo tiene el mismo nombre.

La forma correcta de ingresar el nombre de la función sería "AddPrimaryIndex()" sin inicar con "="

Muchas gracias a todos por la ayuda.

Agradecería que el administrador pudiese cerrar este hilo para que el tema no quede abierto.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable