Mostrar mensaje de alerta al ingresar un dato VBA

Tengo una hoja excel con varios registros, el caso es que quisiera que al registrar por macro dos nombres en particular me muestre un mensaje indicándome que no es posible registrar porque esta prohibido, la sintaxis seria la siguiente:

Si el rango H6 hasta el final de la columna con el ultimo dato, el nombre es igual a "Juan Perez" o "Pepe Lucho" entonces

 msgbox "no se puede registrar a esa persona"

Si no

Se registra

< Instrucción > Ya la tengo

Fin

Espero puedan ayudarme con esta pequeña sintaxis ya que me serviría de mucho...

1 respuesta

Respuesta
1

Esta macro te debería servir:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H:H")) Is Nothing Then
If (Target.Value = "Juan Perez" Or Target.Value = "Pepe Lucho") Then
MsgBox "no se puede registrar a esa persona"
Else
'Se registra
'< Instrucción > Ya la tengo
End If
End If
End Sub

Ten en cuenta que la debes poner en la hoja donde pones los nombres y asociada al evento worksheet_change

Gracias, ¿una consulta adicional como lo podría adaptar a un modulo? Ya que mi instrucción de capturar los datos esta en uno y este código al ponerlo en el evento Change de la hoja si me muestra la advertencia pero si graba los datos, ¿o en todo caso como haría para detener el guardado de los datos al detectar esta advertencia?

Gracias.

Pon tu código aquí y lo reviso

Ok, aquí te dejo el código que guarda los datos de una hoja hacia otra, el detalle esta en que no me ubico en que parte debería poner la condición para impedir que se registre con las condiciones antes mencionadas, gracias.

Sub Captura_Datos()
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Application.ScreenUpdating = False
strTitulo = "Registro de autoridades"
'
Continuar = MsgBox("Desea registrar los datos?", vbYesNo + vbInformation, strTitulo)
If Continuar = vbNo Then Exit Sub
Set TransRowRng = ThisWorkbook.Worksheets("DataBase").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("DataBase")
    .Cells(NewRow, 1).Value = Sheets("Registro").TextBox1.Value
    .Cells(NewRow, 2).Value = Sheets("Registro").ComboBox1.Value
    .Cells(NewRow, 4).Value = Sheets("Registro").ComboBox2.Value
    .Cells(NewRow, 6).Value = Sheets("Registro").txt_numdoc.Value
    .Cells(NewRow, 7).Value = Sheets("Registro").txt_tipodoc.Value
    .Cells(NewRow, 8).Value = Sheets("Registro").txt_nomautor.Value
    .Cells(NewRow, 9).Value = Sheets("Registro").txt_sexo.Value
    .Cells(NewRow, 11).Value = Sheets("Registro").ComboBox3.Value
    .Cells(NewRow, 12).Value = Sheets("Registro").ComboBox4.Value
    .Cells(NewRow, 13).Value = Sheets("Registro").txt_descrip.Value
    .Cells(NewRow, 14).Value = CDate(Sheets("Registro").txt_inicio.Value)
    If Sheets("Registro").CheckBox1.Value = True Then
            .Cells(NewRow, 15).Value = "INDEFINIDO"
    Else
        .Cells(NewRow, 15).Value = CDate(Sheets("Registro").txt_final.Value)
    End If
    .Cells(NewRow, 17).Value = Sheets("Registro").txt_documento.Value
    .Cells(NewRow, 18).Value = CDate(Sheets("Registro").txt_fechadocu.Value)
    .Cells(NewRow, 19).Value = "REGISTRADO"
    .Cells(NewRow, 20).Value = Sheets("Registro").txt_detalles.Value
    .Cells(NewRow, 21).Value = Sheets("Registro").txt_oficio.Value
    .Cells(NewRow, 23).Value = CDate(Sheets("Registro").txt_fechaoficio.Value)
    .Cells(NewRow, 24).Value = CDate(Sheets("Registro").txt_recepcion.Value)
    .Cells(NewRow, 25).Value = Date
    .Cells(NewRow, 26).Value = "PROCESADO"
    .Cells(NewRow, 28).Value = "Usuario01"
    .Cells(NewRow, 29).Value = "CONFORME"
    .Cells(NewRow, 30).Value = Sheets("Registro").txt_detalles2.Value
    .Cells(NewRow, 31).Value = Sheets("Registro").txt_email.Value
    .Cells(NewRow, 32).Value = CDate(Sheets("Registro").txt_nacimiento.Value)
    .Cells(NewRow, 33).Value = Sheets("Registro").txt_eleccion.Value
    .Cells(NewRow, 34).Value = Date
End With
    ThisWorkbook.Save
MsgBox ("Se agregó el registro n° " & NewRow - 5), vbInformation, strTitulo
    Call Limpiar    
    Call Contador
    Sheets("Registro").ComboBox1.Activate
End Sub

Prueba esta macro:

Sub Captura_Datos()
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Application.ScreenUpdating = False
strTitulo = "Registro de autoridades"
'
Worksheets("Database").Columns("H:H").Select
With Selection
Set Juan_Perez = .Find(What:="Juan Perez", After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Set Pepe_Lucho = .Find(What:="Pepe Lucho", After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
If Not Juan_Perez Is Nothing Or Not Pepe_Lucho Is Nothing Then
MsgBox "no se puede registrar a esa persona"
Exit Sub
Else
End If
End With
Continuar = MsgBox("Desea registrar los datos?", vbYesNo + vbInformation, strTitulo)
If Continuar = vbNo Then Exit Sub
Set TransRowRng = ThisWorkbook.Worksheets("DataBase").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("DataBase")
    .Cells(NewRow, 1).Value = Sheets("Registro").TextBox1.Value
    .Cells(NewRow, 2).Value = Sheets("Registro").ComboBox1.Value
    .Cells(NewRow, 4).Value = Sheets("Registro").ComboBox2.Value
    .Cells(NewRow, 6).Value = Sheets("Registro").txt_numdoc.Value
    .Cells(NewRow, 7).Value = Sheets("Registro").txt_tipodoc.Value
    .Cells(NewRow, 8).Value = Sheets("Registro").txt_nomautor.Value
    .Cells(NewRow, 9).Value = Sheets("Registro").txt_sexo.Value
    .Cells(NewRow, 11).Value = Sheets("Registro").ComboBox3.Value
    .Cells(NewRow, 12).Value = Sheets("Registro").ComboBox4.Value
    .Cells(NewRow, 13).Value = Sheets("Registro").txt_descrip.Value
    .Cells(NewRow, 14).Value = CDate(Sheets("Registro").txt_inicio.Value)
    If Sheets("Registro").CheckBox1.Value = True Then
            .Cells(NewRow, 15).Value = "INDEFINIDO"
    Else
        .Cells(NewRow, 15).Value = CDate(Sheets("Registro").txt_final.Value)
    End If
    .Cells(NewRow, 17).Value = Sheets("Registro").txt_documento.Value
    .Cells(NewRow, 18).Value = CDate(Sheets("Registro").txt_fechadocu.Value)
    .Cells(NewRow, 19).Value = "REGISTRADO"
    .Cells(NewRow, 20).Value = Sheets("Registro").txt_detalles.Value
    .Cells(NewRow, 21).Value = Sheets("Registro").txt_oficio.Value
    .Cells(NewRow, 23).Value = CDate(Sheets("Registro").txt_fechaoficio.Value)
    .Cells(NewRow, 24).Value = CDate(Sheets("Registro").txt_recepcion.Value)
    .Cells(NewRow, 25).Value = Date
    .Cells(NewRow, 26).Value = "PROCESADO"
    .Cells(NewRow, 28).Value = "Usuario01"
    .Cells(NewRow, 29).Value = "CONFORME"
    .Cells(NewRow, 30).Value = Sheets("Registro").txt_detalles2.Value
    .Cells(NewRow, 31).Value = Sheets("Registro").txt_email.Value
    .Cells(NewRow, 32).Value = CDate(Sheets("Registro").txt_nacimiento.Value)
    .Cells(NewRow, 33).Value = Sheets("Registro").txt_eleccion.Value
    .Cells(NewRow, 34).Value = Date
End With
    ThisWorkbook.Save
MsgBox ("Se agregó el registro n° " & NewRow - 5), vbInformation, strTitulo
    Call Limpiar    
    Call Contador
    Sheets("Registro").ComboBox1.Activate
End Sub

Si existe uno de los dos nombres en la columna H, aparecerá el Msgbox y no ejecutará la macro

HOla amigo gregori, al intentar guardar el registro me muestra error en esta línea

Worksheets("Database").Columns("H:H").Select

¿Me puedes confirmar que la columna H donde debe chequear si existen los nombres está en la hoja "Database"?

¿La hoja "Database" está oculta?

Ah ok, tengo dos hojas, una "Registro" en donde llenas los datos y se almacena en la hoja "DataBase" en la hoja registro existe un botón llamado agregar que lógicamente guarda todo en la hoja "DataBase", por eso existe esta sentencia:

With ThisWorkbook.Worksheets("DataBase")
    .Cells(NewRow, 1).Value = Sheets("Registro").TextBox1.Value
.
.
.
.
.
.

Gracias estimado.

Entiendo que esta solucionado pues

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas