Nota sobre migrar de VBA a OOo Basic
La compatibilidad entre OOo Basic y VBA hace referencia tanto al lenguaje OOo Basic como a la biblioteca de ejecución. La API de OOo (StarOffice) y el Editor de diálogos no son compatibles con VBA (la estandarización de dichas interfaces hubiese impedido la incorporación de muchos de los conceptos proporcionados por StarOffice).1
Esto, traducido al cristiano, significa que:
VBA 2 | If x = 0 Then MsgBox "x es igual a cero", vbInformation Else MsgBox "x es distinto de cero", vbCritical End If |
---|---|
OOo Basic 2 | if x=0 then msgbox "x es igual a cero", 64 else msgbox "x es distinto de cero", 16 end if |
VBA 2 | For k = 0 To 3000 m = m + 1 Next MsgBox "k contiene " & k & " y m contiene " & _ Format(m, "#,##0.00"), vbQuestion |
---|---|
OOo Basic 2 | for k=0 to 3000 m=m+1 next msgbox "k contiene " & k & " y m contiene " & _ format(m,"#,##0.00"), 32 |
VBA 2 | Sub EjemploVBA() ' Desde un documento Excel abre otro documento Excel ' existente y lo cierra. Dim oHoja As Workbook ' Abro el libro donde quiero buscar el valor oHoja = Workbooks.Open Filename:= _ "NombreyRutaDelDocumento" ' Cierro el libro que acabo de abrir. oHoja.Close End Sub |
---|---|
OOo Basic 2 | Sub EjemploOOoBasic() ' Desde un documento Calc abre otro documento Calc ' existente y lo cierra. Dim sRuta As String, oHoja As Object, mArg() ' Abro el libro donde quiero buscar el valor sRuta = ConvertToUrl( "NombreyRutaDelDocumento" ) oHoja = StarDesktop.loadComponentFromURL( _ sRuta, "_blank", 0, mArg() ) ' Cierro el libro que acabo de abrir oHoja.close(True) End Sub |
Como puedes ver, la estructura de un IF o de un bucle FOR es la misma. En cuanto al Basic, son compatibles. Algunas funciones se llaman y utilizan parámetros parecidos (msgbox o format ), pero no todas. En cuanto a los objetos, el acceso a los mismos, sus propiedades, eventos y métodos, son completamente diferentes, aunque exista alguna coincidencia (el método close para cerrar un documento abierto).
La incompatibilidad de las API y del editor de diálogos hace imposible la importación directa de las macros VBA. Hay que reescribirlas por completo, pues como se ha visto en los ejemplos, los objetos, métodos, propiedades, eventos, etc. son absolutamente diferentes.
Tampoco existe comparación posible entre el editor de VBA y el de OOo. Quien ha trabajado con el primero sabe que es el mismo que se utiliza en Visual Basic v.6 y que proporciona magníficas herramientas de las cuales carece el editor de OOo.
La documentación existente de VBA en la web está muy estructurada, y a pesar de que es tan críptica como cualquier otra para usuarios noveles, es mucho mejor que la disponible para OOo Basic. Recomendamos por ello que consultes los manuales arriba relacionados de Mauricio Baeza y los que han traducido Arturo Garro e Ismael Fanlo. Si conoces un mínimo de inglés, no dudes en aventurarte con los manuales de Andrew Pitonyak. Al fin y al cabo, si sabes programar macros en VBA, no tendrás problema en entender la mayor parte de estos manuales.
Todas estas dolencias hacen que la migración resulte fatigosa y muy laboriosa. No esperes un camino fácil. Migrar macros no es como convertir documentos de Word o de Excel, para los que OOo dispone de un Asistente que -salvo en aquello que no se puede por copyright o por incompatibilidad absoluta- en pocos minutos puede traducir cientos de documentos y plantillas.
Esperemos que en un futuro, ojalá que sea muy próximo, podamos eliminar los comentarios de esta página.