2011-10-07 20 views
7

Tenemos una hoja de cálculo de Exccel utilizada para administrar la rotación de los ingenieros de asistencia fuera de horas. Hace un tiempo, agregué un poco de código VBA que automáticamente desvía los números de teléfono de soporte al teléfono del ingeniero en cuestión de horas.Conexión ADODB de VBA dejó de funcionar

Lo hace conectándose a una base de datos ejecutada por los proveedores del teléfono y actualizando el número de desvío.

Esta tarde, se repente no funciona en el servidor central:

Dim Db As ADODB.Connection 

Sub ConnectDatabase() 
    Set Db = New ADODB.Connection 
    Db.Open "SupportMobileDb" 
End Sub 

El código se detiene en la línea New ADODB.Connection, y los informes:

Run-time error '430': 
Class does not support Automation or does not support expected 
interface 

Todavía puede ejecutar la macro en mi computadora portátil, y funciona correctamente. Y en el servidor central, aún puedo usar Excel y conectarme a la fuente de datos correctamente. Simplemente no funcionará a través de VBA más en este servidor.

La macro se ejecutó correctamente a las 9 a.m. y desvió todos los teléfonos a la oficina, pero el macro de desvío a personal de las 5 pm no funcionó. No puedo ver que Windows se actualizó hoy, o realmente ningún otro cambio en absoluto.

¿Alguien ha visto este problema antes?

Respuesta

16

OK encontró el problema. Parece que en algún momento, una de las referencias externas para el material de VBA no fue habilitada (ADO 2.8 Recordset). He vuelto a agregar la referencia y parece funcionar bien ahora. (!)

Desde alguna manera Tengo 3 upvotes por responder a mi propia pregunta, será mejor poner un poco más de detalle en caso de que otras personas están viendo este problema:

En el editor de Visual Basic, bajo Herramientas -> Referencias, seleccioné Microsoft ActiveX Data Objects 2.8 Library. Pero Microsoft ActiveX Data Objects Recordset 2.8 Library no se seleccionó. Curiosamente, esta biblioteca ni siquiera aparece como una opción cuando se mira en Windows 7, pero las macros funcionan sin ella.

Una nota más, ya que evidentemente muchas personas tienen este problema ... Mi respuesta anterior resolvió el problema, pero solo hasta que ciertas personas editen el archivo nuevamente, en ese punto, su versión de Office vuelve a crear automáticamente el problema, y ​​tuve que resolverlo de nuevo.

Hay dos soluciones a largo plazo:

1) Usted puede utilizar el enlace en tiempo, y deshacerse de la biblioteca que se hace referencia en su totalidad. Ver http://support.microsoft.com/kb/245115 para más detalles sobre esto.

2) Para mis propósitos, moví las macros a otro libro de trabajo por completo: estas macros solo deben ejecutarse desde el servidor central (las personas que solo ven la lista no tienen configurada la fuente de datos ODBC, entonces las macros no se ejecutará de todos modos). Entonces, ahora el primer paso que hace el VBA en el libro de trabajo de la macro es abrir el libro de trabajo de la lista real, y luego ejecuta el resto del código de VBA sin cambios.

3

Hago mucho trabajo de VBA y me he encontrado con esto mucho últimamente. Escribiré un programa y se ejecutará bien durante mucho tiempo (para años en algunos casos) y luego un día algunas computadoras comienzan a recibir este error.

Una de las cosas más obvias para un desarrollador es que ADODB.Connection y/o ADODB.Recordset dejan de autocapitalizarse. O bien ADODB está en minúscula o la segunda parte es. A veces, sin embargo, la capitalización está bien y todavía sucede.

Separar la creación de la conexión y/o el objeto del conjunto de registros desde el cambio de código de la porción "Establecer nuevo" lo ha solucionado cada vez por mí.

En concreto, los siguientes ajustes de código siempre han fijado esto para mí:

Cambiar la creación de objetos de conexión de:

Dim con as New ADODB.Connection 

Para:

Dim con as ADODB.Connection 
Set con = New ADODB.Connection 

Del mismo modo, cambiar el creación de cualquier objeto de conjunto de registros desde:

Dim rs as New ADODB.Recordset 

Para:

Dim rs as ADODB.Recordset 
Set rs = New ADODB.Recordset 
2

tuve un problema similar en mi código VBA funcionó bien en mi máquina local (Windows 7), pero ejecutarlo desde un servidor Citrix (Windows 2003 Server) no y ha fallado con un error de tiempo de ejecución de 430 al intentar establecer una conexión (Set Conn = New ADODB.Connection).

No pensé acerca de las diferencias en las versiones de Windows hasta que la lectura de estas respuestas, y así cuando sin control "Microsoft ActiveX Data Objects 2.8 Library" y comprobado "Microsoft ActiveX Data Objects 2.7 Library", todo funcionó bien

Solo quiero pasar esto y decir gracias por estas publicaciones que me llevan en la dirección correcta.

Cuestiones relacionadas