Saltar al contenido

Proteger libro de excel sin afectar macros


Recommended Posts

publicado

Que tal Amigos,

He creado un libro de excel con algunas Macros, sin embargo como sera utilizado por mas usuarios no me gustaria lo modificaran, hay alguna forma de proteger el libro sin afectar cuando se ejecutan las macros.

Gracias por su ayuda

publicado

Saludos.., por lo que se, excel cuenta con una opción de protección...

De la cinta de opciones, selecciona: DESARROLLADOR o PROGRAMADOR, dependiendo de la versión. Te abre la ventana (visual basic para aplicaciones) del menú de esta ventana selecciona:

Herramientas

Propiedades de VBAProject...

Te abrira una ventana, de esta selecciona la pestaña (protección) tiquea bloquear proyecto para visualización, introduce una contraseña y así no podrán modificar tus macros...

publicado

Gracias Bruckie por tu respuesta, creo que mi pregunta no fue un tanto acertada, me referia un poco a como bloquear el libro de excel para que no puedan modificar formulas y/o modificar las hojas de trabajo mas que lo permitido y que al ejecutar las macros se ejecuten sin algun error ya que actualmente si bloqueo las hojas o el libro mis macros no se ejecuta.

el codigo que tengo actualmente al inicio y final de cada macro es el siguiente

ActiveSheet.Protec

ActiveShet.Unprotect

Pero esto hace que tenga que ingresar contraseña y por ende se desbloquean las hojas de trabajo, hay alguna forma de bloquearlo sin afectar las macros?

Espero haberme explicado un poco mas y poder recibir su ayuda.

Gracias,

publicado

Hola Tocxos, ahora entendí mejor. Lo que tienes que hacer antes de proteger la hoja:

selecciona las celdas que no quieras que se bloqueen dale click derecho en tu selección, del menú selecciona la opción formato de celdas... Te abrira una ventana, de esta selecciona la pestaña Proteger. Te aparecerá las opciones de: Bloqueada y Oculta. Quita el check de bloqueada y aceptas.

Ahora puedes proteger tu hoja. Espero haber sido claro y de ayuda...

publicado

Intenta de esta forma

Private Sub UserForm_Initialize()
Dim hoja As String


hoja = "Hoja1"
Sheets(hoja).Activate
Sheets(hoja).Unprotect (Pass)

End Sub

Private Sub UserForm_Terminate()
Dim hoja As String

hoja = "HOja1"
Sheets(hoja).Protect (Pass)

End Sub[/CODE]

Y en un modulo

[CODE]Public Const Pass= "123"[/CODE]

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.