Cómo transformar una macro de Microsoft Office en una macro de ONLYOFFICE

17 julio 2023Por Sergey

¿Alguna vez te has preguntado cómo convertir tus macros VBA de Microsoft Office en macros que funcionen perfectamente con ONLYOFFICE? Aunque no hay una solución directa para esta conversión, este artículo te guiará a través de los pasos para transformar una macro VBA que nos envió uno de nuestros usuarios.

Cómo transformar una macro de Microsoft Office en una macro de ONLYOFFICE

Macro VBA

Esta es la macro VBA original:

Sub Button1_Click()
    Dim mycel As Range
    For Each mycel In Columns("D:D").SpecialCells(xlCellTypeConstants, 23)
        If mycel = [TODAY()] Then mycel.Offset(0, 1) = [This_value]
    Next
End Sub

Esta macro escanea la columna D para encontrar celdas con un valor constante de 23 y comprueba si el valor de cada celda es igual al valor en la celda etiquetada [TODAY(]. Si los valores coinciden, actualiza la celda en la siguiente columna, desplazada una columna a la derecha, con el valor en la celda etiquetada [This_value].

Cómo transformar una macro de Microsoft Office en una macro de ONLYOFFICE

Creación de la macro de ONLYOFFICE

Para convertir esta macro en una macro JavaScript compatible con ONLYOFFICE, podemos aprovechar la API de ONLYOFFICE.

En la macro de ONLYOFFICE, empezamos por obtener la hoja activa usando la función Api.GetActiveSheet(). A continuación, recuperamos los valores de las celdas A2 y A4, que corresponden a [TODAY()] y [This_value] en la macro VBA:

var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();

A continuación, definimos el rango de celdas sobre el que queremos realizar la iteración utilizando sheet.GetRange(“D1:D10”). Este rango representa la columna D en este ejemplo, pero puedes ajustarlo según tus necesidades específicas:

var dateRange = sheet.GetRange("D1:D10");

Utilizamos la función ForEach para realizar la iteración sobre cada celda del rango definido. Para cada celda, recuperamos el valor actual utilizando range.GetValue() y lo comparamos con el valor de la celda A2. Si coinciden, obtenemos el número de fila de la celda actual utilizando range.GetRow(), y luego obtenemos la celda correspondiente en la columna E utilizando sheet.GetRange(“E” + row):

dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);  }
});

Por último, actualizamos el valor de la siguiente celda (con un desplazamiento de una columna a la derecha) con el valor de la celda A4 utilizando oRange.SetValue(updateValue):

   // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});

El código completo de la macro es el siguiente:

(function()
{
    var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();
var dateRange = sheet.GetRange("D1:D10");
dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);
    // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});
})();

Vamos a ejecutar la macro para ver cómo funciona.

En conclusión, no hay conversión directa de macros VBA a macros JavaScript para ONLYOFFICE. Sin embargo, es posible usar las macros VBA existentes como referencia para crear macros para ONLYOFFICE. Aprovechando los métodos de la API de ONLYOFFICE y haciendo los ajustes necesarios, puedes lograr una funcionalidad similar.

Aunque el proceso puede requerir alguna reestructuración de código, el proceso es manejable. Esperamos que con la orientación descrita en el artículo, puedas crear con éxito potentes macros de ONLYOFFICE. Aprovecha las posibilidades, disfruta de los beneficios, y ¡mucha suerte en tus esfuerzos exploratorios!

Crea tu cuenta gratuita de ONLYOFFICE

Visualiza, edita y colabora en documentos, hojas, diapositivas, formularios y archivos PDF en línea.