Modificar macro de Datos Generales del Estudiante

Tengo una pequeña dificultad con una macro la cual me creaste para que asigne matricula en la columna A luego de escribir un nombre en la columna B.

Hay dos inconvenientes:

1ro: Si se corrige el nombre luego de colocarlo, me cambia la matricula en la columna A.

2do: Si ya hay una matricula en una celda de la columna A y borras cualquier dato de las siguientes columnas(C, DE, E, F, etc), desaparece la matricula de esa misma celda de la columna A. Esta es al macro:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then
        Cells(Target.Row, "A") = ""
        Exit Sub
    End If
    mayor = 1
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
            If Cells(i, "A") <> "" Then
                If InStr(1, Cells(i, "A"), "-") > 0 Then
                    datos = Split(Cells(i, "A"), "-")
                    num = Val(Mid(datos(0), 2))
                    If num > mayor Then
                        mayor = num
                    End If
                End If
            End If
        Next
        Cells(Target.Row, "A") = Left(Target, 1) & mayor + 1 & "-" & Format(Date, "yy")
      End If
   End Sub

Te envio el archivo con la macro por correo.

1 Respuesta

Respuesta
1

Y cuál debería ser el funcionamiento cuando modificas el dato de la columna B

Y cuál debería ser el funcionamiento cuando borras el dato de la columna B

Hola Dante,

Una ves que la macro coloca la matricula en la columna A debe permanecer invariable sin importar los cambios que realices en el nombre que esta en la columna B o información que decidas borrar en las demás columnas.

Si cambias una letra del nombre te cambia el numero que asigno anteriormente, y si borras la información completa desde la columna C en adelante, te borra la matricula de la columna A

Hola dante,

Si se modifica la columna B, en la columna A debe permacer la matricula invariable, es decir no cambiar el numero.

Si se borra informacion de cualquier columna desde la C, no debe desaparecer la matricula de la columna A. Eso es lo que hace actualmente.

Saludos,

MG

Prueba con lo siguiente y me comentas

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
            If Cells(i, "A") <> "" Then
                If InStr(1, Cells(i, "A"), "-") > 0 Then
                    datos = Split(Cells(i, "A"), "-")
                    num = Val(Mid(datos(0), 2))
                    If num > mayor Then
                        mayor = num
                    End If
                End If
            End If
        Next
        If Cells(Target.Row, "A") = "" Then
            Cells(Target.Row, "A") = Left(Target, 1) & mayor + 1 & "-" & Format(Date, "yy")
        End If
    End If
End Sub

Si es lo que necesitas recuerda valorar. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas