es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Duplicación Mensual de Hoja a través de Disparador de Tiempo

Tengo una hoja de cálculo para rastrear las membresías y pagos mensuales. Duplico la hoja al final del mes, la renombro con la fecha y la bloqueo para archivarla. Tengo una macro grabada y configurada para hacer esto y tengo un botón en la hoja para hacer clic en él. Funciona muy bien.

Sin embargo, me gustaría que este script se activara automáticamente por tiempo, lo cual he configurado en el área de Trigger de Google Scripts. Pero cuando se ejecuta, falla y obtengo el siguiente error:

Excepción: Seleccione primero una hoja activa.
en ArchiveSheet(macros:5:15)

Aquí está mi código:

function ArchiveSheet() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
spreadsheet.duplicateActiveSheet();
var sheetname = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), “MMM/yyyy”);
spreadsheet.getActiveSheet().setName(“Archivo “+ sheetname);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Mes Actual’), true);
spreadsheet.getRange(‘J3:J263’).activate();
};

Cualquier ayuda sería apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error se produce porque no se ha seleccionado ninguna hoja activa cuando se activa el script. Para solucionar esto, puede modificar el código para establecer explícitamente la hoja que desea duplicar y renombrar como la hoja activa antes de ejecutar el resto de la función. Aquí está una versión actualizada del código:

    function ArchiveSheet() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var currentSheet = spreadsheet.getActiveSheet();
      var newSheet = currentSheet.copyTo(spreadsheet);
      var sheetname = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM/yyyy");
      newSheet.setName("Archivo "+ sheetname);
      spreadsheet.setActiveSheet(currentSheet);
      currentSheet.getRange('J3:J263').activate();
    }
    

    En esta nueva versión, primero obtenemos una referencia de la hoja activa actual, que duplicaremos y renombraremos. Luego, usamos el método copyTo() para crear una copia de la hoja y asignarla a una variable newSheet. Usamos setName() para darle a la nueva hoja un nombre basado en la fecha actual.

    A continuación, establecemos la hoja original como la hoja activa nuevamente (ya que copyTo() habría hecho que la nueva hoja fuera la activa). Finalmente, seleccionamos un rango en la hoja original (que ahora debería ser la hoja activa) para asegurarnos de que el script se complete correctamente.

    Pruebe a utilizar este código actualizado y vea si resuelve el problema que estaba teniendo con el disparador del script.

Comments are closed.