Problema de connection ODBC de SQL Server

He intentado crear una macro que se ejecuta a través de un file por lotes para generar un informe y he tenido algunos problemas enormemente molestos con la connection a un server SQL, probablemente debido a un error estúpido de mi parte.

Mi código para crear una connection es el siguiente:

Dim dbs As Database Dim qdf As QueryDef Dim rst As Recordset Set dbs = OpenDatabase("", False, False, connect) Set qdf = dbs.CreateQueryDef("") 

donde 'conectar' es una cadena que contiene detalles de connection.

Mi problema es que Excel (2007) parece tener un problema con la última línea de ese bloque, por la razón que sea. He agregado un observador a la variable dbs, y parece perfectamente bien, entonces ¿por qué no le gusta qdf?

Lo más extraño es que si pongo un command 'Parar' al principio de la macro, empiezo la ejecución desde el file por lotes y luego continúo manualmente al llegar al Stop, funciona perfectamente y hace exactamente lo que me gustaría. a.

Intenté mirar DBEngine.Errors, y eso me dice que tengo los siguientes problemas:

  • Error general: identificador de window inválido
  • La connection no está abierta

De nuevo, esto no tiene sentido para mí, especialmente dado que funciona bajo ejecución manual, y Google no ha dado ninguna respuesta.

PD: Si esto no está claro, por favor también eche un vistazo a esta pregunta , que parece estar preguntando lo mismo, pero no tiene respuesta.

Entonces, usando el método científico, un compañero de trabajo y yo pudimos averiguar cuál era el problema, aunque no tengo idea de cómo tiene sentido o por qué sería siquiera un problema en primer lugar. El layout de la macro fue, en un sentido aproximado, de la siguiente manera:

  • Pruebe la connection de la database y ciérrela
  • Crear nuevo libro de trabajo
  • Conéctese de nuevo a la database y rellene el libro de trabajo de las llamadas a la base

Sin embargo, por alguna razón, la solución terminó siendo que a VBA no le gustó el hecho de que estábamos haciendo cosas de connection antes y después de crear el libro de trabajo. Cambiar el flujo del progtwig a:

  • Crear nuevo libro de trabajo
  • Pruebe la connection de la database y ciérrela
  • Conéctese de nuevo a la database y rellene el libro de trabajo de las llamadas a la base

Hizo el truco. De nuevo, no tengo idea de por qué esto solucionó nuestro problema, o si cambiar el order de esta secuencia cambió algo más significativo dentro del código, ¡pero funciona ahora! Si alguien tiene alguna idea de por qué esto podría ser, siéntase libre de comentar.