Estamos utilizando un conjunto de archivos de Excel en varias máquinas en nuestra empresa. Estos archivos contienen una aplicación de VBA que utiliza una pareja de control de ActiveX de objetos de mscomct2.ocx de la biblioteca (es decir, MonthView y DateTimePicker). Objetos ActiveX se muestra en el formulario de usuario. Por desgracia, la portabilidad de los archivos parece estar limitado en una forma muy peculiar.

Parece ser 2 grupos de máquinas:

  • Grupo a: puedo crear un archivo de Excel que contiene MonthView en la máquina y trabajar con él en cualquier Grupo de UN PC. Pero cuando intento abrir este archivo en cualquier equipo del Grupo B, me estoy poniendo un no se Pudo cargar un objeto ya no está disponible en esta máquina de error. Sin embargo, los archivos con el mismo ActiveX creado en el Grupo B de máquinas de trabajo normalmente en Una de las máquinas.
  • Grupo B: Archivo con un ActiveX en cuestión creado en estas máquinas trabajan en todas partes (es decir, en cualquier a y B de la máquina). Pero, como he dicho antes, B máquinas de dar el mensaje de error mencionado anteriormente, cuando los archivos con ActiveX guardado en Una máquina está abierta.

En una frase: archivos creados en Una máquina que sólo funcionan en otros a, los archivos creados en B de las obras por todas partes!

Lo más curioso aquí es que cada máquina tiene mscomct2.ocx registrado (una vez más: yo puedo crear el formulario con la MonthView en cualquier máquina en cuestión!). El .ocx es en sí mismo en lugar de en cada máquina y el conjunto de claves de registro no está presente (Clsid para los controles de clases, Iid, biblioteca de tipos de IDENTIFICACIÓN…). Además, los datos de estas claves del registro parece ser el mismo que en a y B, grupo de máquinas (Guid, Progid, versiones, etc.). Hay ligeras diferencias en la descripción de las cadenas de texto (valores como «Microsoft Control MonthView 6.0 (SP6)») en algunas máquinas, pero esto no parece afectar a la situación de algunos equipos en el grupo B tiene este tipo de descripciones diferentes, pero los archivos creados en ellos todavía trabajan en todo el mundo).

Naturalmente, gracias a la ley de Murphy, la máquina que uso para editar estos archivos de Excel pertenece al Grupo A, por lo que los archivos guardados aquí son «transportables» a B máquinas…

El sistema operativo y versiones de Excel no parecen afectar a la situación. Por ejemplo, uno de B máquinas está funcionando en Win 7 de 64 bits (Excel 2007), mientras que la mayoría de los otros grupos a y B son las máquinas Win XP Prof (32 bits) con service pack 3, con Excel 2003 instalado. Así que parece que el sistema operativo y versiones de Excel no afectar la compatibilidad y el problema es de alguna manera conectado con ActiveX.

La única ActiveX relacionadas con la diferencia entre los grupos a y B que he encontrado es la versión del archivo de mscomct2.ocx: al menos varias de las máquinas de tener la versión 6.1.x.x, mientras que el Grupo B ha 6.0.x.x. No veo cómo puede tal diferencia causar problemas (ActiveX son objetos COM después de todo, y de acuerdo a los valores de clave del registro, expuestas de la biblioteca de tipos, objetos e interfaces com parecen ser los mismos en todos los casos). Sin embargo he intentado reemplazar mi 6.1.x.x ocx con 6.0.x.x versión… y se encontró con más problemas. Lo que hice es:

  1. regsvr32 /u mscomct2.ocx – completado con éxito
  2. Sustituyó a la mscomct2.ocx con archivo de 6.0.x.x versión
  3. regsvr32 mscomct2.ocx – completado con éxito

Después de estos pasos traté de hacer un archivo de Excel con un solo formulario que contiene el MonthView. Pero cuando he intentado colocar un control en el formulario tengo un cuadro de mensaje con el error Clase no registrada. Esto es realmente extraño, porque todo lo que parece ser registrada: el control de la clase, sus interfaces, biblioteca de tipos (sí, lo he comprobado en el registro para asegurarse). Pero aún así el error estaba allí.

Después de que hice el anular el registro/reemplazar/registro de procedimiento de nuevo para volver a mi original 6.1.x.x archivo. Que me llevó de nuevo a la original SNAFU situación: yo podría volver a instalar ActiveX para el formulario de usuario y uso, pero en el Grupo B, máquinas aún dio el error en los archivos guardados por mi máquina.

Asumo que el problema de los archivos con ActiveX portabilidad y el problema de ocx registro de alguna manera están conectados, pero no veo cómo. Tal vez hay algunos requisitos adicionales para el registro de un control ActiveX en VBA de Excel que no sé…

Yo lo único que necesitas es tener el objeto ActiveX contaned en mi archivo de Excel compatible con otras máquinas. Alguien me puede ayudar con eso?

1 Comentario

  1. 1

    Creo un grupo (probablemente «A») tiene esta instalado: http://www.microsoft.com/download/en/details.aspx?id=10019, otro no.

    • He probado esta actualización en ambos grupos – sin efecto
    • OK. 1. Qué tal este? microsoft.com/download/en/… El rel.las notas dicen que incluye la versión 6.1 de la controlz que no.. 2. También se podría tratar de mover el 6.0 archivo a tu 6.1 sistema, tal y como hizo, pero además, repita los pasos 1-3 con otro OCX, «comctl32.ocx». P. S. El problema es sin duda el infierno DLL de VB 6.0 de la época.. Echa un vistazo a este hilo: windows-installer-xml-wix-toolset.687559.n2.nabble.com/…
    • 1. Soy incapaz de instalar esta actualización en nuestro Pc: se requiere el ‘Visual Basic 6″ Producto instalado. Evidentemente el VB utiliza en Excel no cuenta. Incluso he intentado este archivo en una máquina con total VS2005 instalado (VB incluido) – mismas cosas. 2. Ningún efecto demasiado 🙁 Gracias por tu ayuda, de todos modos – +1 por su preocupación.
    • P. S. me gustaría saber al menos de qué clase es exactamente el «no registrado» cuando estoy tratando de bajar el ocx. Hay manera de aprender que?
    • OK, entonces usted puede intentar descomprimir el archivo MSI (mediante la ejecución de «msiexec /a VB60SP6-KB926857-x86-ENU.msi TARGETDIR=C:\Temp\VB6Controls /qb» desde la línea de comandos), que voy a dar 8 archivos OCX: comct232.ocx mschrt20.ocx mscomct2.ocx msdatgrd.ocx MSFlxGrd.Ocx mshflxgd.ocx msmask32.ocx mswinsck.ocx, y tratar de registrar todos ellos. El incluido mscomct2.ocx ha 6.1.98.12 de versión de archivo, 6.01.9812 versión del producto.
    • P. S. Usted puede utilizar ProcessMonitor utilidad para que: technet.microsoft.com/en-us/sysinternals/bb896645. Sólo tienes que configurar los filtros de modo que sólo se incluye el proceso que le da un messagebox, intente registrar el servidor, consulte el cuadro de mensaje, a continuación, detener el registro de la secretaría, y leer el registro de abajo a arriba. Sin embargo, el rel. notas de la actualización dice que ellos han solucionado algunos problemas de seguridad, así que me gustaría intentar hacer la actualización de los controles en lugar de la descalificación..
    • He tratado de instalar los archivos desempaquetados en dos equipos (uno del grupo a, uno del grupo B). El grupo parece que Una máquina capaz de utilizar el control ActiveX de un nuevo ocx, pero el archivo todavía no portátil para B. Después de intentar instalar el mismo conjunto de archivos en el grupo B de la máquina tengo Clase no registrada de nuevo. Pero ahora soy incapaz de restaurar el estado anterior en esta máquina: la restauración de las antiguas versiones de 8 ocx y ejecutar regsvr32 en ellos no ayuda.
    • También he comprobado la procmon de registro en el proceso de excel de este grupo B de la máquina. Parece que la única CLSID que el proceso no es capaz de recuperar es {00000000-0000-0000-0000-000000000000}. ¿Por qué es buscando el nulo GUID?

Dejar respuesta

Please enter your comment!
Please enter your name here