Consejo: Otros idiomas son traducidos por Google. Puedes visitar el English versión de este enlace.
Iniciar sesión
x
or
x
x
Suscríbete
x

or

¿Cómo bloquear las celdas especificadas sin proteger toda la hoja de trabajo en Excel?

Normalmente, debe proteger la hoja de trabajo completa para bloquear la edición de celdas. ¿Hay algún método para bloquear celdas sin proteger toda la hoja de trabajo? Este artículo recomienda un método de VBA para usted.

Bloquear celdas especificadas sin proteger toda la hoja de trabajo con VBA

Ficha Office Habilite la edición y navegación con pestañas en Office y haga su trabajo mucho más fácil ...
Kutools para Excel: la mejor herramienta de productividad de Office resolverá la mayoría de sus problemas de Excel
  • Reutilizar cualquier cosa: Agregue las fórmulas más utilizadas o complejas, gráficos y cualquier otra cosa a sus favoritos, y reutilícelos rápidamente en el futuro.
  • Más de características de texto 20: Extraer número de la cadena de texto; Extraer o eliminar parte de los textos; Convertir números y monedas a palabras en inglés ...
  • Herramientas de fusión: Múltiples libros de trabajo y hojas en uno; Fusionar múltiples celdas / filas / columnas sin perder datos; Combinar filas duplicadas y sumar ...
  • Herramientas divididas: Dividir datos en varias hojas en función del valor; Un libro de trabajo para múltiples archivos Excel, PDF o CSV; De una columna a varias columnas ...
  • Saltar pasta Filas ocultas / filtradas; Cuenta y suma por color de fondo; Crear lista de correo y Enviar correos electrónicos por el valor de la celda...
  • Súper filtro: Cree esquemas de filtro avanzados y aplique a cualquier hoja; Tipo de Propiedad por semana, día, frecuencia y más; Filtrar por negrita, fórmulas, comentario ...
  • Más de potentes funciones de 300; Funciona con Office 2007-2019 y 365; Soporta todos los idiomas; Fácil despliegue en compañía; Funciones completas de prueba gratuita de 60-day.

flecha azul burbuja derechaBloquear celdas especificadas sin proteger toda la hoja de trabajo con VBA


Supongamos que necesita bloquear la celda A3 y A5 en la hoja de trabajo actual, el siguiente código VBA lo ayudará a lograrlo sin proteger toda la hoja de trabajo.

1. Haga clic con el botón derecho en la pestaña de la hoja y seleccione Ver código desde el menú contextual.

2. Luego copie y pegue el siguiente código de VBA en la ventana Código. Ver captura de pantalla:

Código de VBA: bloquee las celdas especificadas sin proteger toda la hoja de trabajo

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then
        If Target.Row = 3 Or Target.Row = 5 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
        End If
    End If
End Sub

Nota: En el código, Columna 1, Row = 3 y Row = 5 indica que la celda A3 y A5 en la hoja de cálculo actual se bloquearán después de ejecutar el código. Puede cambiarlos cuando lo necesite.

3. presione el otro + Q llaves al mismo tiempo para cerrar el Microsoft Visual Basic para aplicaciones ventana.

Ahora las celdas A3 y A5 están bloqueadas en la hoja de trabajo actual. Si intenta seleccionar la celda A3 o A5 en la hoja de trabajo actual, el cursor se moverá automáticamente a la celda adyacente a la derecha.


flecha azul burbuja derechaArtículos relacionados:


Kutools for Excel: la mejor herramienta de productividad de Office aumenta su productividad en un 80%

  • Reutilizar: Insertar rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña Crear una lista de correo y enviar correos electrónicos ...
  • Super Formula Bar (edite fácilmente varias líneas de texto y fórmula); Diseño de lectura (lee y edita fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir células duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Celdas múltiples sin cambiar la referencia de fórmula; Crear referencias automáticamente a múltiples hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extracto del texto, Agregar texto, Eliminar por posición, Eliminar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtro a otras hojas); Clasificación avanzada por mes / semana / día, frecuencia y más; Filtro especial por negrita, cursiva ...
  • Combinar libros de trabajo y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes xls, xlsx y PDF...
  • Más de potentes funciones de 300. Admite Office / Excel 2007-2019 y 365. Soporta todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas de prueba gratuita de 60-day.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilitar la edición y lectura con pestañas en Word, Excel, PowerPoint, Editor, Acceso, Visio y Proyecto.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta tu productividad en un 50% y reduce cientos de clics de ratón por ti todos los días!
fondo officetab
Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Kasey · 2 months ago
    Hi,

    I have tried to use the code for ranges you have previously posted but it isn't working - can you advise me if I should be combining the code for ranges above or below?


    Thanks
  • To post as a guest, your comment is unpublished.
    Charlie · 7 months ago
    Hello,

    I used the code provided to Carlos and it did exactly what I wanted it to. Is there a way to have some ranges offset within the ROW to the right of the protected range (as the "Carlos" code already does), but have other ranges offset within the COLUMN to the cell directly below the protected range? I tried entering the "Carlos" code twice and changing the offset, but I received a variety of errors.

    Thank you
    • To post as a guest, your comment is unpublished.
      crystal · 7 months ago
      Hi Charlie,
      Sorry can't help you with that yet. Thank you for your comment.
  • To post as a guest, your comment is unpublished.
    Espen · 8 months ago
    Is there any function to set for example Row 2 cell 13 to 900? Or do i need to manually punch each cell name in the code?
  • To post as a guest, your comment is unpublished.
    Christophe Bourquard · 10 months ago
    Bonjour,
    Comment faire pour verrouiller de la cellule B8 à B10000?
    D'avance merci de votre réponse.
    Christophe
  • To post as a guest, your comment is unpublished.
    Erin · 1 years ago
    Dear Crystal,

    Thank you so much for this! It works perfectly.

    I have used the code in Carlos' comment to run the macro automatically as you open the file. I was wondering if there is a way of having an "Undo" button or something like it, that allows you to cancel that code and therefore, unlock those ranges that have been locked.

    I want those to be locked most of the time, but I would like to unlock them should I need to change any of the data. The only reason I am not protecting the whole sheet is because, if I do, it deactivates the ability to expand on tables. That in turn, expand on a line chart.

    Thanks so much for the help!
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Hi Erin,
      You can manually break the code by clicking the Break button in the Microsoft Visual Basic for Applications window to unlock those ranges. And run the code to activate it again. Thanks for your comment.
  • To post as a guest, your comment is unpublished.
    Carlos · 1 years ago
    Dear Crystal,

    Is there anyway that this macro can be run automatically upon opening the file, or upon clicking any cell. I don't want people to have to run the macro manually in order for the required ranges to be protected.

    Also, I will need to protect 12 non adjacent ranges. For example: I11:I20 and K11:K20 and M11:20 etc... How do I do this?

    Last, and this one might be asking too much, but is it possible to apply the protection to the example ranges that I provided above, BUT then extend the protection down additional rows as new ones are added? In other words, protection would be applied to I11:I20 and K11:K20 and M11:20, but a user would be able to add a new row (row 21), with new data, but once the new row is added, then the protection would apply to I11:I21 and K11:K21 and M11:21. Am I asking for the moon? :-)

    Thank you for everything that you've already provided! I can't thank you and other people like you enough for sharing the your knowledge. Amazing!
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Dear Carlos,
      The following VBA code can help you solving the problem. Please fill in your ranges in the fourth line of the code and press the Alt + Q keys to return to the worksheet. Then please shift to other worksheet and then go back to current sheet to activate the code. Thank you for your comment.

      Dim xRg As Range
      Private Sub Worksheet_Activate()
      If xRg Is Nothing Then
      Set xRg = Union(Range("I10:I20"), Range("K10:K20"), Range("M10:M20"), Range("O10:O20"))
      End If
      End Sub
      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim I As Integer
      Dim xRgNew As Range
      Dim xRgLCell As Range
      On Error Resume Next
      Application.EnableEvents = False
      For I = 1 To xRg.Areas.Count
      Set xRgLCell = xRg.Areas.Item(I)
      Set xRgLCell = xRgLCell(xRgLCell.Count).Offset(1, 0)
      If Target.Address = xRgLCell.Address Then
      If xRgNew Is Nothing Then
      Set xRgNew = Target
      Else
      Set xRgNew = Union(xRgNew, Target)
      End If
      End If
      Next
      Set xRg = Union(xRg, xRgNew)
      Application.EnableEvents = True
      End Sub
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      On Error GoTo Exitsub
      If (Not Intersect(xRg, Target) Is Nothing) And (Target.Count = 1) Then
      Target.Offset(0, 1).Select
      End If
      Exitsub:
      End Sub
  • To post as a guest, your comment is unpublished.
    Angel Pablo Izquierdo Molino · 1 years ago
    Dear Crystal,

    You have provided me with a solution (half of it) that I have been struggling for the last few weeks, but I would need some more hints.

    How this could be applied to a table range only, not whole worksheet? Thanks in advance.
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Good Day,
      As the VBA code provided below, please change the specified range "H:J,4:46" to the table range you only want to lock in the worksheet.
      And cells(1,1) should be the cell outside the table range. When clicking on any cell in the table range, the cursor will be moved to that cell automatically.

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim xRg As Range
      Dim xRgEx As Range
      Dim xRgExEach As Range
      On Error Resume Next
      Application.ScreenUpdating = False
      Set xRg = Range("H:J,4:46") 'Change the row range and column range you will lock without protecting worksheet
      Set xRgEx = Application.Intersect(xRg, Target)
      If xRgEx Is Nothing Then Exit Sub
      Cells(1, 1).Select 'Specify a cell you will shift to after selecting the locked cells
      Application.ScreenUpdating = True
      End Sub
  • To post as a guest, your comment is unpublished.
    AJ · 1 years ago
    how could i lock a range of rows, say 4-46 and columns 8 and 10
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Dear AJ,
      If you want to lock a range of specified rows and columns, please try the below VBA script.

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim xRg As Range
      Dim xRgEx As Range
      Dim xRgExEach As Range
      On Error Resume Next
      Application.ScreenUpdating = False
      Set xRg = Range("H:J,4:46") 'Change the row range and column range you will lock without protecting worksheet
      Set xRgEx = Application.Intersect(xRg, Target)
      If xRgEx Is Nothing Then Exit Sub
      Cells(1, 1).Select 'Specify a cell you will shift to after selecting the locked cells
      Application.ScreenUpdating = True
      End Sub
  • To post as a guest, your comment is unpublished.
    ajay · 2 years ago
    I wanted to hide formula in Cell O1. Please inform formula for the same.
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Dear ajay,
      If you want to hide formula in cell O1 without protecting the worksheet, please try the below VBA script.
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Static TheFormula As String
      If Target.Address = "$O$1" Then
      With Target
      TheFormula = .Formula
      .Value = .Value
      End With
      Else
      With Range("O1")
      If Not .HasFormula Then
      .Formula = TheFormula
      End If
      End With
      End If
      End Sub

      After using the code, it seems that the formula of cell O1 is changed to formula result. Actually, it hides the formula with displaying the formula result in the Formula Bar. And the formula will display if the code is broken.
    • To post as a guest, your comment is unpublished.
      crystal · 1 years ago
      Dear ajay,
      For hidding formula of cells, please follow the below hyperlink to get the solution.
      https://www.extendoffice.com/documents/excel/1424-excel-hide-formulas.html