none
Problemas con MSCOMM32.OCX y VBA(Excel) RRS feed

  • Pregunta

  • Buenos días,

    A ver si alguien me puede ayudar o guiar.

    Tengo una programa hecho en VBA en Excel para comunicar por RS232 y me da el siguiente error.

    Se ha producido el error 429 en tiempo de ejecución: El Componente ActiveX no puede crear el objeto

    Estoy usando Windows 10 64 bit y Excel 2013 32 bit, en otro ordenador con el mismo Windows y el mismo Excel funciona sin problema. Ya tengo la librería MSCOMM32.OCK en SysWOW64\MSCOMM32.OCX y registrada en modo administrador, según windows satisfactoriamente. También he probado una solución que encontré por Internet de modificar unas llaves del registro pero no hay manera y no encuentro mas soluciones. ¿Alguien tiene alguna otra idea? o ¿sabéis de algún otro modo de comunicar con el puerto serie sin usar componentes ActiveX?

    Gracias.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.<br/> <
    Blog

    viernes, 18 de octubre de 2019 8:12

Todas las respuestas

  • Buenas a todos,

    Después de mucho investigar he conseguido solucionar mi problema, la solución ha sido dejar de usar el componte ocx y tratar el puerto serie como si fuera un fichero, que es como lo trata Windows. Para ello uso el siguiente código.

    Dim linea As String
    Dim strEnvio As String
    Dim byte1 As Byte
    strEnvio = "#1RP" + Chr$(13)
    Open "COM3:19200,N,8,1" For Binary Access Read Write As #1
    Put #1, , strEnvio
    byte1 = 0
    While byte1 <> 13
        Get #1, 1, byte1
        linea = linea + Chr(byte1)
    Wend
    Close #1

    Bien, con esto tendria que ser suficiente, pero desgraciadamente no lo es ya que 

    Open "COM3:19200,N,8,1" For Binary Access Read Write As #1

    Se supone que abre y configura el puerto serie, pero no es así, con lo que hay que configurar el puerto directamente en Windows, al no ser que alguien sepa otra forma de hacerlo y lo comparta con nosotros. Para poder configurarlo desde windows hay que abrir el símbolo del sistema y ejecutar la siguiente instrucción

    mode COM3 19200,N,8,1

    Para poder ejecutarlo desde VBA he recurrido al siguiente código que he encontrado por internet, que me perdone el autor por no nombrarlo pero he buscado tanto que no me acuerdo de donde lo he sacado.

    Dim wsh As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    Dim Configura_Puerto As String
    Configura_Puerto = "mode com3 19200,N,8,1"
    wsh.Run Configura_Puerto, windowStyle, waitOnReturn

    Comentar que com3, 19200, n, 8, y 1 son realmente variables , aquí he puesto texto para que se entienda mejor.

    Si alguien me sabe decir cual es el motivo de que 

    Open "COM3:19200,N,8,1" For Binary Access Read Write As #1

    no configure el puerto y sabe alguna manera de hacerlo sin ejecutar el shell le agradecería que lo compartiera.

    Un saludo a todos.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog


    • Editado Rodripelto domingo, 27 de octubre de 2019 12:53 corrección
    domingo, 27 de octubre de 2019 12:52