Macro para modificar parámetro general de tabla |
Responder |
Autor | |||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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é.
|
|||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
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 |
|||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
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
|
|||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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.
|
|||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 18/Noviembre/2020 a las 16:03 | ||
Apostaría un sugus de piña que el # no le gusta ni un pelo.
¿ No me irás a decir que has llamado una tabla #T_Vigente_Pre ?
|
|||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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.
|
|||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 18/Noviembre/2020 a las 17:05 | ||
Para que Access ejecute el código desde una macro, este debe estar declarado como 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
Editado por Dabellaso - 18/Noviembre/2020 a las 17:08 |
|||
El saber no ocupa lugar, sólo tiempo
|
|||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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.
|
|||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
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
|
|||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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
|
|||
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
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
|
|||
Jose PV
Nuevo Unido: 03/Febrero/2020 Localización: Chile Estado: Sin conexión Puntos: 36 |
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.
|
|||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |