Pregunta sobre la protección de una hoja "Protect; Unprotect" de una macro

Hola Dante… de nuevo te saludo y me surge una pregunta… Porque en la macro que me proporcionaste todo funciona bien pero le agrego el “Sheets(h).Protect”, (h1, obra, uc, b, etc.) y con esta protección me manda un mensaje “error 9, subíndice fuera de intervalo”, te pido me apoyes con la corrección de esta función. Muchas gracias por tu atención. Te comento que además de este formulario en este programa tengo otros 2 de captura de datos generales: de “obra” y otro de “proveedores”, esto por si tiene algo que ver con esos códigos.

REFERENCIA: “Apoyo para una macro que debe retornar el contenido de sus celdas en TxBx…” 22-Nov

1 Respuesta

Respuesta
1

El error es porque la hoja h no existe, debes poner el nombre de la hoja:

Por ejemplo:

Sheets("Hoja1"). Protect

En la macro que te envié la h es un objeto

Pero no sé en qué momento quieres proteger la hoja.

Si la quieres proteger, deberá ir al final de la macro, pero para que la macro funcione la tienes que desproteger al principio. Podría quedar así:

Private Sub CommandButton1_Click() 'ESTE COMANDO ES SOLO PARA INSERTAR LA APLICACION
'Por.Dante Amor
    Application.ScreenUpdating = False
    For Each h In Sheets
         n = h.Name
        If UCase(h.Name) = UCase(ComboBox1) Then
            existe = True
            Exit For
        End If
    Next
    If existe = False Then
        MsgBox "La hoja seleccionada no existe", vbCritical, "SELECCIONAR OBRA"
        Exit Sub
        ComboBox1.SetFocus
    End If
    Set h1 = Sheets(ComboBox1.Value)
    'desproteger la hoja
    h1.Unprotect
    TextBox1 = h1.Range("d3") 'Obra
    TextBox2 = h1.Range("d4") 'Localización
    TextBox3 = h1.Range("d5") 'Mpio
    Set b = h1.Columns("B").Find(ComboBox3, lookat:=xlWhole)
    If Not b Is Nothing Then
        h1.Cells(b.Row, "I") = Val(TextBox6)
    End If
    Set b = h1.Columns("A").Find(ComboBox2, lookat:=xlWhole)
    If Not b Is Nothing Then
        uc = h1.Cells(b.Row, Columns.Count).End(xlToLeft).Column + 1
        If uc < 7 Then uc = 7
        h1.Cells(b.Row, uc) = Date
        h1.Cells(b.Row, uc + 1) = TextBox5
        h1.Cells(b.Row, uc + 2) = Val(TextBox6)
    End If
    'Proteger la hoja
    h1.Protect
    MsgBox "Importe insertado"
End Sub

En este caso estoy  utilizando el objeto h1, porque lo establecí en Set h1 = Sheets(ComboBox1.Value) , y por eso puedo cambiar la propiedad de la hoja así:

H1. Unprotect

H1. Protect


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas