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...
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.
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.
- Compartir respuesta