Excel 2003: Msgbox cuando una celda está incompleta

Para Dante Amor

Hola! Tengo la siguiente macro para resolver la siguiente situación:

  1. Bloquear la celda C7 si la celda B7 está vacía
  2. Bloquear F7:H7 si la celda E7 está vacía
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Target.Address(False, False) = "D7" Then
        If Target = "" Then Exit Sub
            If [C7] = "" Then
            MsgBox "Primero debe completar el Nombre del Transporte", vbExclamation
            ActiveSheet.Unprotect "papel"
            Range("D1").Select
            Selection.Copy
            Range("D7").Select
                Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Range("C7").Select
            ActiveSheet.Protect "papel"
            End If
    End If
    If Not Intersect(Target, Range("F7, G7, H7")) Is Nothing Then
        If Target = "" Then Exit Sub 'ESTA LÍNEA SE PINTA POR EL ERROR
            If [E7] = "" Then
            MsgBox "Primero debe completar el Nombre del Transporte", vbExclamation,
            ActiveSheet.Unprotect "papel"
            Range("F1:H1").Select
            Selection.Copy
            Range("F7").Select
                Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            ActiveSheet.Protect "papel"
            End If
        Range("E7").Select
    End If
    End Sub

Ahora bien, tengo un problema con la línea 73 (me sale un cartel que dice "Error '13'.... No coinciden los tipos") y no puedo resolverlo

Respuesta
1

H o l a:

Te anexo la macro actualizada, el detalle es que copias unas celdas y las pegas en la celda F7, entonces como estás modificando nuevamente la celda F7 se activa otra vez la macro, para que no se active otra vez la macro, se pone la instrucción Application.EnableEvents = False, después de realizar el pegado, se tienen que habilitar nuevamente los eventos con: Application.EnableEvents = True

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address(False, False) = "D7" Then
    If Target = "" Then Exit Sub
        If [C7] = "" Then
        MsgBox "Primero debe completar el Nombre del Transporte", vbExclamation
        ActiveSheet.Unprotect "papel"
        Application.EnableEvents = False
        Range("D1").Select
        Selection.Copy
        Range("D7").Select
            Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        Application.EnableEvents = True
        Range("C7").Select
        ActiveSheet.Protect "papel"
        End If
End If
If Not Intersect(Target, Range("F7, G7, H7")) Is Nothing Then
    If Target.Value = "" Then Exit Sub 'ESTA LÍNEA SE PINTA POR EL ERROR
        If [E7] = "" Then
        MsgBox "Primero debe completar el Nombre del Transporte", vbExclamation
        ActiveSheet.Unprotect "papel"
        Application.EnableEvents = False
        Range("F1:H1").Copy
        Range("F7").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        Application.EnableEvents = True
        ActiveSheet.Protect "papel"
        End If
    Range("E7").Select
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas