Necesita proteger partes de un documento de Word y dejar otras secciones editables por usuarios o grupos específicos. La protección de documentos estándar en Word se aplica a todo el documento y no permite un control detallado sobre secciones individuales. Este artículo explica cómo usar Visual Basic for Applications (VBA) para aplicar protección específica por sección que restrinja la edición en algunas secciones y permita cambios en otras. Aprenderá la estructura del código VBA, cómo establecer contraseñas por sección y cómo asignar permisos de edición a usuarios específicos.
Puntos clave: Protección de documentos específica por sección mediante VBA
- Herramientas > Macro > Editor de Visual Basic (Alt+F11): Abra el editor de VBA para escribir y ejecutar macros de protección.
- ActiveDocument.Sections(index).ProtectedForForms = True: Bloquee una sección específica para que solo se puedan editar los campos de formulario.
- ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=”password”: Aplique restricciones de edición protegidas con contraseña a todo el documento mientras se conserva la configuración de campos de formulario a nivel de sección.
- ActiveDocument.Sections(index).Range.Editors.Add Editor:=”username”: Otorgue permisos de edición a usuarios específicos para una sección determinada.
Cómo funciona la protección específica por sección en Word
La protección de documentos integrada de Word (Revisar > Restringir edición) se aplica a todo el documento. Puede optar por permitir solo comentarios, cambios controlados o rellenar formularios. Sin embargo, este método no permite bloquear la Sección 1 y dejar la Sección 2 totalmente editable. VBA proporciona una solución alternativa combinando la protección de campos de formulario con permisos a nivel de sección.
El concepto central utiliza la propiedad ProtectedForForms de un objeto Section. Cuando se establece en True, esa sección se comporta como si contuviera solo campos de formulario: no se puede editar ningún otro contenido. Al establecer esta propiedad en False para las secciones que desea que permanezcan editables, crea un documento con protección mixta. Luego llama al método Protect del objeto Document con wdAllowOnlyFormFields para aplicar la configuración a nivel de sección.
Requisitos previos
Antes de escribir código VBA, asegúrese de lo siguiente:
- Tiene un documento de Word dividido en secciones mediante saltos de sección (Disposición > Saltos > Página siguiente, Continuo, etc.).
- Conoce los números de índice de las secciones que desea proteger. La Sección 1 es la primera sección del documento.
- Tiene el editor de VBA habilitado. Vaya a Archivo > Opciones > Personalizar cinta de opciones y marque la pestaña Desarrollador. Luego haga clic en Desarrollador > Visual Basic.
- Si planea asignar permisos a usuarios específicos, esos usuarios deben tener cuentas de Microsoft o formar parte de la misma organización que utiliza Information Rights Management (IRM).
Pasos para aplicar protección específica por sección mediante VBA
Siga estos pasos para crear una macro que bloquee la Sección 1 y la Sección 3 mientras deja editable la Sección 2. Ajuste los índices de sección para que coincidan con su documento.
- Abra el Editor de VBA
Presione Alt+F11 para abrir el editor de Visual Basic for Applications. En el Explorador de proyectos, localice su documento (por ejemplo, Project (Document1)). - Inserte un nuevo módulo
Haga clic en Insertar > Módulo para crear un módulo de código en blanco. - Escriba la macro de protección
Pegue el siguiente código en el módulo:Sub ProtectSections()
Dim doc As Document
Set doc = ActiveDocument' Unprotect the document first if already protected
If doc.ProtectionType <> wdNoProtection Then
doc.Unprotect Password:=""
End If' Set ProtectedForForms for specific sections
' Section 1: protected
doc.Sections(1).ProtectedForForms = True
' Section 2: editable
doc.Sections(2).ProtectedForForms = False
' Section 3: protected
doc.Sections(3).ProtectedForForms = True' Apply document-level protection to enforce form-field only editing
doc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:="MyPassword123"MsgBox "Protection applied. Sections 1 and 3 are locked; Section 2 is editable."
End Sub - Ejecute la macro
Presione F5 mientras el cursor está dentro de la macro, o vaya a Ejecutar > Ejecutar Sub/UserForm. Un cuadro de mensaje confirma que se aplicó la protección. - Pruebe la protección
Intente editar texto en la Sección 1 o la Sección 3. Word debería impedir los cambios. Cambie a la Sección 2 y verifique que puede editar libremente. Si el documento está protegido con contraseña, deberá introducir la contraseña para desprotegerlo más adelante.
Asignación de permisos a usuarios específicos
Para permitir que solo ciertos usuarios editen una sección mientras permanece bloqueada para los demás, agregue el siguiente código dentro de la macro después de establecer ProtectedForForms pero antes de llamar a doc.Protect.
- Agregue un usuario a la colección Editors de una sección
Use el métodoEditors.Addcon el correo electrónico o nombre de usuario:doc.Sections(2).Range.Editors.Add Editor:="user@example.com"
Esto otorga permiso de edición a ese usuario para la Sección 2 incluso cuando el documento está protegido. - Elimine todos los editores de una sección protegida
Para asegurarse de que nadie excepto el propietario pueda editar una sección protegida, borre la colección Editors:doc.Sections(1).Range.Editors.DeleteAll - Aplique la protección con permisos de usuario
Después de establecer los editores, llame adoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:="MyPassword123". Los usuarios agregados como editores pueden modificar el contenido en sus secciones asignadas.
Problemas comunes al usar VBA para la protección de secciones
ProtectedForForms no bloquea la sección
Si una sección permanece editable después de establecer ProtectedForForms = True, probablemente olvidó llamar a doc.Protect en el documento. La propiedad ProtectedForForms solo surte efecto cuando el documento está protegido con wdAllowOnlyFormFields. Incluya siempre la línea doc.Protect después de establecer las propiedades de la sección.
La macro se ejecuta pero la protección no se aplica después de cerrar y volver a abrir
La configuración de protección del documento se guarda con el archivo. Cuando vuelve a abrir el documento, la protección permanece activa. Sin embargo, también se conserva la configuración de ProtectedForForms por sección. Para verificarlo, abra el documento, vaya a Revisar > Restringir edición y compruebe que esté seleccionado “Rellenar formularios”. Si el panel muestra “Sin protección”, ejecute la macro de nuevo. Considere agregar una macro AutoOpen para volver a aplicar la protección automáticamente.
Error de permisos al agregar editores
El método Editors.Add requiere que el documento use Information Rights Management (IRM) o que el usuario esté autenticado mediante una cuenta de Microsoft. Si recibe un error en tiempo de ejecución, asegúrese de que el documento no esté ya protegido con un tipo diferente. Desproteja el documento primero, luego agregue los editores y, por último, vuelva a aplicar la protección.
| Elemento | Restringir edición estándar de Word | Protección específica por sección con VBA |
|---|---|---|
| Alcance | Documento completo | Secciones individuales |
| Permisos de usuario | No compatible por sección | Compatible mediante la colección Editors |
| Contraseña | Una contraseña para todo el documento | Una contraseña para todo el documento, pero las secciones se comportan de manera diferente |
| Edición permitida | Solo comentarios, cambios controlados o campos de formulario | Edición completa en secciones no protegidas; solo campos de formulario en secciones protegidas |
| Requiere VBA | No | Sí, para establecer la configuración inicial |
Ahora puede aplicar protección de documentos específica por sección en Word mediante VBA. Comience identificando las secciones de su documento y escribiendo una macro que establezca ProtectedForForms para cada sección. Recuerde llamar a doc.Protect con wdAllowOnlyFormFields para aplicar la configuración. Para escenarios avanzados, asigne editores a secciones específicas mediante el método Editors.Add. Para automatizar la protección cada vez que se abra el documento, coloque la macro en el módulo ThisDocument y use el evento Document_Open.