Convertir código de evento de hoja a modulo

Me puedes ayudar a convertir esto código de pasar de ser a

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then
valor = Target.Value
contarsi = Application.WorksheetFunction.CountIf(Columns(2), valor)
If contarsi > 1 Then
MsgBox "No podemos Ingresar este dato ya que existe, Guardalo de direfente manera para continuar", vbInformation, "INFORMACÍON"
Target.Select
Target. ClearContents

A ponerlo en modulo para ejecutarlo con un botón te lo agradezco saludos"

2 respuestas

Respuesta
1

Pero la revisión la hace con una celda. Para pasarlo a un módulo necesitas decirme cuál celda, ¿o qué sea la celda que selecciones?

Pues quisiera que evalué toda la columna B a partir de la fila 2

Al ejecutarse si hay dato repetido entonces salga el mensaje y elimine el dato que recién se quería poner

¿Pero si hay varios repetidos? ¿Qué elimine todos los repetidos o que te avise?

que me elimine el dato que puse (repetido) y me salga el aviso

Pero al hacer la macro en un módulo, la revisión será todos contra todos, eso es lo que quieres, que empiece a revisar desde la fila2. ¿Si no has corrido la macro en varios días y acumulaste varios repetidos entonces debe borrar todos?

Es por eso la macro de eventos, si no tenemos el evento, no sabes cuál es el dato que acabas de poner, puede ser el de cualquier fila.

¿Si no has corrido la macro en varios días y acumulaste varios repetidos entonces debe borrar todos? R= Lo que pasa es que esa macro la pondré en otra macro

Osea que al ejecutarse un código donde agrego datos (otro modulo que tengo)

Si existe el dato entonces se ejecutara la macro el cual me estas ayudando

Pero el otro módulo debe verificar antes de agregar el dato.

Lo que necesita el otro módulo es un .find para buscar el dato, si ya existe, entonces enviar el mensaje. Si no existe, entonces debe agregar el dato. Esa es la forma correcta, y no al revés, es decir, tu primero quieres cometer el error, después revisar si hay error, y por último, corregir el error, eso es trabajar demás.

aaaaa ok ya entendí, ¿lo qué me sugieres y sera que me puedas ayudar a crear ese código?

Mira este es el código donde lo anexare:

Private Sub CommandButton1_Click()
If TextBox2.Value = "" Then
MsgBox "Falta dato de: " & Label2.Caption, , "ALTO"
TextBox2.SetFocus
Exit Sub
End If
If TextBox3.Value = "" Then
MsgBox "Falta dato de: " & Label3.Caption, , "ALTO"
TextBox3.SetFocus
Exit Sub
End If
If TextBox4.Value = "" Then
TextBox4.SetFocus
MsgBox "Falta dato de: " & Label4.Caption, , "ALTO"
TextBox4.SetFocus
Exit Sub
End If
AGREGA = MsgBox("¿Deseas agregar a: " & TextBox2.Value & " En la base de datos ?", vbYesNo + vbQuestion, "AVISO")
If AGREGA = vbYes Then
********AQUI AGREGAR EL CODIGO DE VALORACION DE DATOS REPETIDOS*************
'ActiveCell.Offset(0, -1).Value = ""
End If
End If
Exit Sub
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
ActiveCell.Offset(0, 5).Value = TextBox4.Value
CAPTURA_FORMULARIO.TextBox3.Value = ActiveCell.Offset(0, 1)
CAPTURA_FORMULARIO.TextBox1.Value = ActiveCell.Offset(0, 0)
CAPTURA_FORMULARIO.TextBox9.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox10.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox11.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox12.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox13.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox14.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox15.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox16.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox17.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox18.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox19.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox20.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox21.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox22.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox23.Value = "$0.00"
CAPTURA_FORMULARIO.TextBox24.Value = "$0.00"
Else
ELIMINAR_ULTIMO_FOLIO
'Unload Me
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox2.SetFocus
Exit Sub
End If
AGREGA_2 = MsgBox("¿Seguir agregando personal ?", vbYesNo + vbQuestion, "AVISO")
If AGREGA_2 = vbYes Then
AGREGAR_ULTIMO_FOLIO
TextBox1.Value = ActiveCell
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox2.SetFocus
Else
Unload Me
End If
End Sub
Private Sub CommandButton2_Click()
ELIMINAR_ULTIMO_FOLIO
Unload Me
End Sub

ahi te marque donde colocar el codigo,  antes de agregar el dato entonces que me evalue si es posible o no, yo tenia ese pero tu idea es buena!

Te anexo el código

    If AGREGA = vbYes Then
        '********AQUI AGREGAR EL CODIGO DE VALORACION DE DATOS REPETIDOS*************
        'Por.Dante Amor
        Set b = Columns("B").Find(TextBox2, lookat:=xlWhole)
        If Not b Is Nothing Then
            MsgBox "El dato ya existe"
            Exit Sub
        End If
        '
        'Aquí pones el código para agregar tus datos
        '
        'ActiveCell.Offset(0, -1).Value = ""
    End If

sal u dos

Respuesta
1

.15.12.16

Hola, Jairo

Puede ser que esté faltando información para hacer lo que pides, por eso esta rutina hace lo que aquella pero considerando la celda seleccionada al ejecutarla:

Sub elimina()
LaColumna = 2 'indica la columna donde contar datos
' 
valor = ActiveCell.Value
contarsi = Application.WorksheetFunction.CountIf(Columns(LaColumna), valor)
If contarsi > 1 Then
    MsgBox "No podemos Ingresar este dato ya que existe, Guardalo de direfente manera para continuar", vbInformation, "INFORMACÍON"
    ActiveCell.ClearContents
Else
End If
End Sub

Espero que sea lo que buscas o puedas adaptarla. Si no, preguntame de nuevo.

Saludos

Fernando

.

voy a probar muchas gracias por tu tiempo

.

Ok, fíjate que dejé un ELSE para que pongas - luego de él- lo que debería hacer la rutina en caso de que no hubiese más de 1 caso. En tu ejemplo no aparecía esa parte.

Éxitos!

Fer

.

si me fije gracias

.

OK, perfecto.

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas