Hola a todos.
La idea es que tengo una tabla que quiero compartir con otros editores, donde parte este sin proteger para que puedan poner datos, pero 2 columnas están protegidas. A su vez, una macro asignada a un botón me permite reorganizar alfabéticamente desde las 2 columnas protegidas.
Por tanto, la idea que se me ocurrió, fue que al pulsar el botón para activar la macro, primero me desprotegiera, luego hiciese la ordenación y por último, volviera a proteger esas columnas.
En mi caso funciona bien, porque ves como realiza todos los pasos, pero en el caso de los demás editores no funciona, sale una ventana diciendo que no tiene permisos para modificar esas celdas porque están protegidas.
Os pongo a continuación el código para ver si alguien me puede echar una mano. Gracias.
function ordenarNombresAscendente() {
desprotegerRango();
ordenarNombresAscendente1();
protegerRango5OK();
}
function desprotegerRango(){
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("U1-ENERO");
var protections = hoja.getProtections(SpreadsheetApp.ProtectionType.RANGE);
protections[0].remove();
}
function ordenarNombresAscendente1() {
const libro=SpreadsheetApp.getActiveSpreadsheet();
const hoja=libro.getActiveSheet()
const arregloOriginal=hoja.getRange(10,3,hoja.getLastRow()-9,23).getValues()
arregloOriginal.sort(funcionOrdenarNombresAscendente)
hoja.getRange(10,3,hoja.getLastRow()-9,23).setValues(arregloOriginal)
}
var funcionOrdenarNombresAscendente=function(a,b){
if(a[0]>b[0]){return 1}
else if (b[0]>a[0]){return -1}
return 0
}
function protegerRango5OK(){
var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rango = hoja.getRange('C10:D65');
var proteccion = rango.protect();
proteccion.setDescription("Proteger Rango")
}