Trasformare una macro di Microsoft Office in una macro ONLYOFFICE

6 luglio 2023By Elena

Sei curioso di sapere come convertire le macro VBA di Microsoft Office in macro che funzionino perfettamente con ONLYOFFICE? In questo articolo ti guideremo attraverso i passi della trasformazione di una macro VBA che ci è stata inviata da uno dei nostri utenti.

Transforming a Microsoft Office macro into an ONLYOFFICE macro

Macro VBA

Ecco la macro VBA originale:

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

Questa macro esegue la scansione della colonna D per le celle con un valore costante di 23 e controlla se il valore di ogni cella è uguale al valore nella cella targata [TODAY()]. Se i valori corrispondono, aggiorna la cella nella colonna successiva a destra, con il valore nella cella denominata [This_value].

Transforming a Microsoft Office macro into an ONLYOFFICE macro

Creazione della macro ONLYOFFICE

Per convertire questa macro in una macro JavaScript compatibile con ONLYOFFICE, possiamo utilizzare l’API ONLYOFFICE..

Nella macro ONLYOFFICE, iniziamo ottenendo il foglio attivo con la funzione Api.GetActiveSheet(). Quindi recuperiamo i valori dalle celle A2 e A4, che corrispondono a [TODAY()] e [This_value] nella macro VBA:

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

Successivamente, definiamo l’intervallo di celle su cui vogliamo iterare usando sheet.GetRange(“D1:D10”). Questo intervallo rappresenta la colonna D in questo esempio, ma è possibile modificarlo in base alle proprie esigenze specifiche:

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

Usiamo la funzione ForEach per iterare su ogni cella nell’intervallo definito. Per ogni cella, recuperiamo il valore corrente utilizzando range.GetValue() e lo confrontiamo con il valore nella cella A2. Se corrispondono, otteniamo il numero di riga della cella corrente utilizzando range.GetRow(), quindi otteniamo la cella corrispondente nella colonna E utilizzando 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);  }
});

Infine, aggiorniamo il valore nella cella successiva (offset di una colonna a destra) con il valore della cella A4 utilizzando oRange.SetValue(updateValue):

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

L’intero codice della macro è:

(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);
  }
});
})();

Eseguiamo la macro e vediamo come funziona la macro!

In conclusione, non esiste una conversione diretta dalle macro VBA alle macro JavaScript per ONLYOFFICE. Tuttavia, puoi utilizzare le tue macro VBA esistenti come riferimento durante la creazione di macro per ONLYOFFICE. Utilizzando i metodi dell’API ONLYOFFICE e apportando le modifiche necessarie, puoi ottenere funzionalità simili.

Sebbene possa richiedere una ristrutturazione del codice, il processo è gestibile. Ci auguriamo che con alcune indicazioni delineate nell’articolo, tu possa creare potenti macro ONLYOFFICE. Sfrutta le possibilità, goditi i benefici e in bocca al lupo!