Buscar 3 criterios y llenar celdas si tercer criterio está vacío.

Tengo 1 formulario (3 texbox, 1 botón), 2 hojas (datos, ingreso).

En form1 en 1er.textbox ingreso mi nombre luego click en botón comando que verifica si mi nombre está registrado en hoja datos luego va a hoja ingreso y busca si el nombre, fecha y hora de ingreso no estén repetidos y se registra en las celdas A (nombre), B (fecha automática con formula) y C (hora también con fórmula) de hoja. Ingreso, éste es el codigo pero me funciona, favor ayuda:

Private sub ingreso()

Vnom=nombre.text

Vfecha=fechahoy.value

Sheet("datos").select

Set busca1=Sheet("datos").range("A:A").find(vnombre)....

If busca is nothing then

Msgbox"NO ESTÁ REGISTRADO"

  else

Ind=0

Sheets("ingreso").select

Set busca2=Sheet("ingreso").range("A:A").find(vnom,.....) 

If not busca2 is nothing then

Primercoincid=busca2.address

Do

If busca2.offset(0,1)=fechahoy then

If busca2.offset(0,2)<> empty then

Busca2,select

Msgbox"ya está registrado"

Else

Ind=1

Fila=2

Col="A"

Do while true

If isempty(cells(fila,col)) then exit do

Fila=fila +1

Loop

Cells(fila,"A").value=nombre.text

Cells(fila,"B").value=format(now,"Dd/mm/yyyy")

Cells(fila,"C").value=format(now,"hh:mm")

Endif

endif

Set busca2=activesheet.range("A:A").findnext(busca2)

Loop while not busca2  is nothing and busca2.address <> Primercoincid and Ind=0

Endif

Set busca2=nothing

End sub

2 respuestas

Respuesta
3

Esta es una macro sencilla que hace lo que buscas, si el nombre existe en cualquiera de las 2 hojas te lo mostrara en un mensaje y terminara el programa, en caso contrario hara la captura solo especifica antes de range("a:a") del with la hoja donde quieres hacer la captura

Private Sub nombre_text_afterupdate()
validar
End Sub
Sub validar()
nombre = nombre_text.Text
valida_r = WorksheetFunction.CountIf(Sheets("datos").Range("a:a"), nombre) > 0
valida_d = WorksheetFunction.CountIf(Sheets("registro").Range("a:a"), nombre) > 0
If valida_r Then MsgBox ("el nombre ya existe en la hoja datos"), vbInformation, "AVISO": End
If valida_r Then MsgBox ("el nombre ya existe en la hoja REGISTROS"), vbInformation, "AVISO": End
cuenta = Range("a:a").CurrentRegion.Rows.Count
With Range("a:a").CurrentRegion.Resize(cuenta, 3)
    .Cells(cuenta + 1, 1) = nombre
    .Cells(cuenta + 1, 2) = Format(Format(Now, "Dd/mm/yyyy"))
    .Cells(cuenta + 1, 3) = Format(Now, "hh:mm")
End With
End Sub
Respuesta
1

El código esta lleno de errores de texto, repásalo todo, comprueba que los nombres de cada variable estén siempre igual escritos, y que los bucles if then-end if y Do - loop esten bien configurados.

Te marco algunos ejemplos:

vnom <=> vnombre

Set busca2=Sheet("ingreso")  ===>  SIEMPRE Sheets(

quita puntos suspensivos (...)

De todas formas voy a intentar repasarlo yo y te cuento.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas