Cómo crear formularios de usuario en Office Scripts (4 formas)

Índice
  1. Ejemplos
  2. Dar forma a los formularios de usuario
    1. Propiedades de forma
    2. Interacciones del botón de Office Script
  3. Formularios de usuario de rango
    1. Propiedades de rango
    2. Interacciones del botón de Office Script
  4. Formularios de usuario de la hoja de trabajo
    1. Propiedades de la hoja de trabajo
    2. Interacciones del botón de Office Script
  5. Formularios de usuario dinámicos
  6. Conclusión

Una de las mayores quejas sobre Office Scripts es la falta de UserForms. Los formularios de usuario existen en VBA y muestran una ventana adicional para recopilar la entrada del usuario. Desafortunadamente, no existe una característica equivalente en Office Scripts. Sin embargo, existen otros métodos para obtener entradas del usuario que funcionan con Office Scripts. Entonces, en esta publicación, veremos cómo crear formularios de usuario en Office Scripts.

NOTA: No estoy sugiriendo que los scripts de Office tengan tantas funciones como VBA en esta área, pero quiero demostrar que los scripts de Office no son tan limitados como muchos podrían pensar.

Estamos analizando esta área de 4 maneras:

  • Dar forma a formularios de usuario : usar formas en una hoja de trabajo para crear la apariencia de un formulario de usuario
  • Formularios de usuario de rango : uso de rangos ocultos en una hoja de trabajo que se pueden mostrar para mostrar un formulario de usuario
  • Formularios de usuario de hoja de trabajo : uso de hojas de trabajo adicionales para operar como un formulario de usuario
  • Formularios de usuario dinámicos : creación de formularios de usuario de formas, rangos u hojas de cálculo sobre la marcha con un script de Office
Tabla de contenido
  • Ejemplos
  • Dar forma a los formularios de usuario
    • Propiedades de forma
    • Interacciones del botón de Office Script
  • Formularios de usuario de rango
    • Propiedades de rango
    • Interacciones del botón de Office Script
  • Formularios de usuario de la hoja de trabajo
    • Propiedades de la hoja de trabajo
    • Interacciones del botón de Office Script
  • Formularios de usuario dinámicos
  • Conclusión

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre de archivo: 0132 Office Scripts UserForms.zip

Tener acceso

Ejemplos

Todos los ejemplos de esta publicación siguen un patrón similar.

Hay tres botones:

  • Al hacer clic en el icono de lápiz se muestra el formulario de usuario.
  • Al hacer clic en Listo, se ingresa el valor en las celdas y se cierra el formulario de usuario.
  • Al hacer clic en Cerrar se cierra el formulario de usuario sin hacer nada con los valores.

El código de todos los ejemplos se incluye a continuación.

Dar forma a los formularios de usuario

Los formularios de usuario de formas son simplemente objetos de formas colocados en la parte frontal de la hoja de trabajo. Controlamos la visibilidad de las formas mediante el método getVisibility().

Eche un vistazo al siguiente ejemplo:

Formularios de usuario con forma de script de Office

Propiedades de forma

Todas las formas están configuradas con las siguientes propiedades:

  • No mover ni dimensionar con celdas
  • Bloqueado: marcado
  • Texto de bloqueo: marcado

Los cuadros de texto son la excepción; estos están configurados para:

  • No mover ni dimensionar con celdas
  • Bloqueado: marcado
  • Texto de bloqueo: sin marcar

Propiedades de forma

Esto significa que podemos cambiar el texto incluso en una hoja de trabajo protegida.

NOTA: Las formas solo pueden aceptar entrada de texto, por lo que su uso puede estar limitado en muchos escenarios.

Interacciones del botón de Office Script

El Office Script para controlar los formularios de usuario como sea posible.

ToggleShapeUserForm

Los botones Lápiz y Cerrar ejecutan el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the sheet  let ws = workbook.getActiveWorksheet()  //Get the list of shapes in the form  let shpList = "frm1Box|frm1Name|frm1LoveScripts|frm1TextName|frm1TextLoveScripts|frm1BtnClose|frm1BtnDone"    //Get the lists of shape names and cells  let inputList = "frm1TextName|frm1TextLoveScripts"  let inputRange = "C3|C5"  //Split the list into an array  let shpListArr = shpList.split("|")  let inputListArr = inputList.split("|")  let inputRangeArr = inputRange.split("|")  //Test the first shape to see if visible  let isVisible = ws.getShape(shpListArr[0]).getVisible()  //Loop through all shapes and toggle visibility  for (let i = 0; i  shpListArr.length; i++) {    ws.getShape(shpListArr[i]).setVisible(!isVisible)  }  //Loop through shapes and set default values  for (let i = 0; i  inputListArr.length; i++) {    ws.getShape(inputListArr[i]).getTextFrame().getTextRange().setText(ws.getRange(inputRangeArr[i]).getValue())  }}

Los comentarios en el código proporcionan más detalles sobre cada sección. Para agregar más formas al script, solo necesitamos cambiar las cadenas shpList , inputList y inputRange .

AceptarFormaUsuarioForm

El botón Listo ejecuta el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the sheet  let ws = workbook.getActiveWorksheet()  //Get the list of shapes in the form  let shpList = "frm1Box|frm1Name|frm1LoveScripts|frm1TextName|frm1TextLoveScripts|frm1BtnClose|frm1BtnDone"  //Get the lists of shape names and cells  let inputList = "frm1TextName|frm1TextLoveScripts"  let inputRange = "C3|C5"  //Split the list into an array  let shpListArr = shpList.split("|")  let inputListArr = inputList.split("|")  let inputRangeArr = inputRange.split("|")  //Test the first shape to see if visible  let isVisible = ws.getShape(shpListArr[0]).getVisible()  //Loop through all shapes and toggle visibility  for (let i = 0; i  shpListArr.length; i++) {    ws.getShape(shpListArr[i]).setVisible(!isVisible)  }  //Return the value to the protected cell  ws.getProtection().unprotect()  for (let i = 0; i  inputListArr.length; i++) {    ws.getRange(inputRangeArr[i]).setValue(ws.getShape(inputListArr[i]).getTextFrame().getTextRange().getText())  }  ws.getProtection().protect()}

Formularios de usuario de rango

Los formularios de usuario de rango son celdas de la hoja de trabajo inicialmente configuradas como ocultas. Una vez que un usuario hace clic en un botón, las celdas se revelan para mostrar un área para recopilar la entrada del usuario.

Rango: formularios de usuario en scripts de Office

Propiedades de rango

Para este escenario, necesitamos configurar correctamente la propiedad Bloquear de las celdas:

  • Celdas de entrada: desbloqueadas
  • Todas las demás celdas: bloqueadas

Este método oculta o muestra columnas en una hoja de trabajo protegida. Este problema es que si una columna contiene celdas bloqueadas, no podemos ocultar ni mostrar toda la columna. Por lo tanto, lamentablemente necesitamos:

  • Desproteger la hoja de trabajo
  • Ocultar/Mostrar rango
  • Proteger la hoja de trabajo

No es ideal, pero funciona.

Interacciones del botón de Office Script

Los Office Scripts para controlar los formularios de usuario son:

ToggleRangeUserForm

Los botones Lápiz y Cerrar ejecutan el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the sheet  let ws = workbook.getActiveWorksheet()  //The range of cells containing the user form  let frmRange = "H2:K9"  //Get the lists of input and target cells  let inputRng = "J3|J5"  let targetRng = "C3|C5"  //Split the list into an array  let inputRngArr = inputRng.split("|")  let targetRngArr = targetRng.split("|")  //Test if range is visible  let isVisible = !ws.getRange(frmRange).getColumnHidden()  //Hide or unhide the range  ws.getProtection().unprotect()  ws.getRange(frmRange).setColumnHidden(isVisible)  ws.getProtection().protect()  //Set the default values  if (isVisible) {    ws.getRange("C3").select()  } else {    ws.getRange("J3").select()    for (let i = 0; i  inputRngArr.length; i++) {      ws.getRange(inputRngArr[i]).setValue(ws.getRange(targetRngArr[i]).getValue())    }  }}

Los comentarios en el código proporcionan más detalles sobre cada sección. Para agregar más formas al script, solo necesitamos cambiar las cadenas inputList y inputRange .

Aceptar rango de formulario de usuario

El botón Listo ejecuta el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the sheet  let ws = workbook.getActiveWorksheet()  //The range of cells containing the user form  let frmRange = "H2:K9"  //Get the lists of input and target cells  let inputRng = "J3|J5"  let targetRng = "C3|C5"  //Split the list into an array  let inputRngArr = inputRng.split("|")  let targetRngArr = targetRng.split("|")    //Test if range is visible  let isVisible = !ws.getRange(frmRange).getColumnHidden()  //Unprotect the worksheet  ws.getProtection().unprotect()  //Return the values ot the cells  for (let i = 0; i  inputRngArr.length ; i++) {    ws.getRange(targetRngArr[i]).setValue(ws.getRange(inputRngArr[i]).getValue())  }  //Hide the cells  ws.getRange(targetRngArr[0]).select()  ws.getRange(frmRange).setColumnHidden(isVisible)    //Protect the worksheet  ws.getProtection().protect()}

Formularios de usuario de la hoja de trabajo

Los formularios de usuario de la hoja de trabajo cambian la visibilidad de una hoja de trabajo. Esa hoja de trabajo contiene las celdas de entrada para recopilar la entrada del usuario.

Formularios de usuario de hoja de cálculo en scripts de Office

Propiedades de la hoja de trabajo

En los ejemplos de código para este escenario, configuré la hoja de trabajo como muy oculta (para que no aparezca en la lista de hojas de trabajo). Pero dependiendo de tu situación, puedes decidir configurarlo como oculto.

Si se ha aplicado la protección del libro de trabajo, debemos:

  • Desproteger el libro
  • Ocultar/mostrar la hoja de trabajo
  • Proteger el libro de trabajo

Prefiero no utilizar el método de desproteger y volver a proteger, pero a veces eso es lo que tenemos que hacer.

Interacciones del botón de Office Script

Los Office Scripts para controlar los formularios de usuario son:

ToggleWorksheetUserForm

Los botones Lápiz y Cerrar ejecutan el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the worksheets  let ws = workbook.getWorksheet("Start")  let frmWs = workbook.getWorksheet("User Form")  //Get the lists of input and target cells  let inputRng = "D3|D5"  let targetRng = "C3|C5"  //Split the list into an array  let inputRngArr = inputRng.split("|")  let targetRngArr = targetRng.split("|")  //Test if worksheet is visible  let isVisible = frmWs.getVisibility()  //Toggle the sheet visibility  if (isVisible === "Visible") {    frmWs.setVisibility(ExcelScript.SheetVisibility.veryHidden)    ws.activate  } else {    frmWs.setVisibility(ExcelScript.SheetVisibility.visible)    frmWs.activate()    frmWs.getRange("D3").select()    //Get the default values    for (let i = 0; i  inputRngArr.length; i++) {      frmWs.getRange(inputRngArr[i]).setValue(ws.getRange(targetRngArr[i]).getValue())    }  }}

Los comentarios en el código proporcionan más detalles sobre cada sección. Para agregar más celdas al script, solo necesitamos cambiar las cadenas inputList y inputRange .

Aceptar hoja de trabajo y formulario de usuario

El botón Listo ejecuta el siguiente script.

function main(workbook: ExcelScript.Workbook) {  //Get the worksheets  let ws = workbook.getWorksheet("Start")  let frmWs = workbook.getWorksheet("User Form")  //Get the lists of input and target cells  let inputRng = "D3|D5"  let targetRng = "C3|C5"  //Split the list into an array  let inputRngArr = inputRng.split("|")  let targetRngArr = targetRng.split("|")  //Unprotect sheet  ws.getProtection().unprotect()  //Return values back to cells  for (let i = 0; i  inputRngArr.length; i++) {    ws.getRange(targetRngArr[i]).setValue(frmWs.getRange(inputRngArr[i]).getValue())  }  //Activate and protect the worksheet  ws.activate()  ws.getProtection().protect()  //Hide the user form  frmWs.setVisibility(ExcelScript.SheetVisibility.veryHidden)}

Formularios de usuario dinámicos

El último tipo de formulario de usuario de Office Script es un formulario dinámico. Puede tener la forma, el rango o el tipo de hoja de trabajo mencionados anteriormente. Sin embargo, el script los crea sobre la marcha.

Actualmente no podemos crear un botón conectado a Office Script sobre la marcha. Por lo tanto, el botón debe existir de antemano y luego copiarse o moverse en el formulario de usuario generado.

Conclusión

Si bien los scripts de Office no son tan potentes como VBA, aún podemos crear una interactividad similar a la de los formularios de usuario en los scripts de Office. En esta publicación, utilizamos formas, rangos y hojas de trabajo como formularios de usuario. ¿Se te ocurre algún otro? Si es así, háganoslo saber en los comentarios a continuación.

Artículos Relacionados

  • Cómo crear un bonito botón de Office Scripts (3 formas)
  • Cómo ejecutar Power Automate desde Excel con Office Scripts o VBA
  • Utilice scripts de Office con Power Automate

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...