Hola. Ya casi lo tengo pero hay una parte que no funciona. Trabajo con Access 2.0 (es lo que hay en el curro) y la instrucción For Each no la coge. Esta es la parte que falla: ' Si existe la consulta Consulta PARCIAL BA 1, la elimina. For Each QDF IN Dbs.QueryDefsIf QDF.Name = "PARCIAL BA 1" Then Dbs.QueryDefs.Delete QDF.Name End If Next QDF A ver si me echas un cable y me comentas como puedo borrar los querydefs. Solo coge instruccion For Next.
Gracias
Es lógico que algunas cosas, como esta, en Access 2 no te vayan ya que en versiones superiores (97, 2000, XP) se han ido implementando nuevas opertaivas de programación, como es el caso... De todos modos, ese código de eliminación de la consulta, si existe, lo que hace es que comprueba si hay alguna consulta grabada con el mismo nombre que vamos a utilizar para nuestro QueryDef posterior (en tu caso "PARCIAL BA1"), y si existe la elimina para poder crear luego la nuestra con el código. Si existiera, no la eliminara e intentáramos por código hacer una con el mismo nombre te generaría un error. Por ello, basta con asegurarnos de que no existe ninguna consulta con ese nombre ("PARCIAL BA1") y podríamos omitir ese trozo de código. Lo lógico es que no exista, ya que si no la borraríamos al ejecutar eta macro, por lo que si nos da igual eliminarla, ¿para qué va a existir, verdad? De todos modos, para que veas cómo se podría hacer exactamente lo mismo de otro modo a continuacióin te detallo la posible sustitución: - Sustituye: ' Si existe la consulta Consulta PARCIAL BA 1, la elimina. For Each QDF IN Dbs.QueryDefsIf QDF.Name = "PARCIAL BA 1" Then Dbs.QueryDefs.Delete QDF.Name End If Next QDF por: On Error Resume Next DoCmd.RunSQL "DROP Table [PARCIAL BA1]" Lo que hace este nuevo código es lo siguiente: - El "On Error Resume Next" lo que hace es que si se produce un error durante la ejecución de alguna de las lineas de código siguientes lo controla sin mostrar mensajes ni parar la aplicación y pasar a la siguiente linea de código. - El "DoCmd.RunSQL 'DROP..." lo que hace es ejecutar una sentencia SQL que elimina la tabla "PARCIAL BA1". - En conjunto, pasa por "On Error..." sin hacer nada especial, ejecuta el "DoCmd.Run..." y: a/ Si existe la tabla a eliminar, la elimina y nada más (tal y como lo hacia el código anterior). b/ Si no existe esa tabla que queremos borrar, daría un error, pero como lo tenemos controlado con el "On Error..." no pararía la aplicación ni mostraría error alguno, siguiendo el código pasadndo a la siguiente linea. Espero que, además de que con esto veas otra posible forma de hacerlo, entiendas cómo funciona. Un saludo y ya sabes donde encontrarme para lo que necesites. Suerte en tu desarrollo! Óscar L.M.V.