Formulario, fórmula y más...

Hola Fernando:
Aprovecho la ocasión para confesarte que soy un ferviante admirador de tu profesionalidad y para desearte que todo te vaya a las mil maravillas.
Necesito tu inestimable ayuda en las DOS siguientes cuestiones que suponen un escollo y que tras darle vueltas y vueltas no he sido capaz de solventar y que -francamente- son de vital importancia para mí:
1) He construido un formulario en excel que coloca en las celdas de la hoja FORMULARIO una serie de datos por trabajador, entre ellos nombre del trabajador, fecha y número de parte de trabajo.
Pues bien, no consigo ver dónde puedo indicar en las propiedades del TextBox del UserForm que corresponde al número del parte de trabajo que el dato que se está entrando es numérico.
Cunado dicho dato acaba en la hoja FORMULARIO, no consigo que lo considere un número ni siquiera dándole el formato numérico a toda la columna a la que van a parar estos datos entrados en el formulario.
2) En la hoja contigua a la llamada FORMULARIO, quiero determinar quién no entrega el parte de trabajo en una fecha determinada, para ello utilizo la siguiente fórmula en la celda D16 (que arrastraría hacia abajo):
=SI(ESNOD(Y(COINCIDIR($C16;FORMULARIO!$A$12:$A$1502;0);COINCIDIR($D$14;FORMULARIO!$B$12:$B$1502;0)));"FALTA";"O.K.")
Donde:
$C16 es el nombre del operario (conforme arrastro la fórmula hacia abajo, el operario cambia).
Formulario! $A$12:A$1502: es el rango de datos de la hoja FORMULARIO que contiene el nombre de cada operario que entrega su parte de trabajo.
$D$14: es una fecha determinada.
Formulario! $B$12:$B$1502: es el rango de datos de la hoja FORMULARIO que contiene la fecha en la que un determinado operario (que viene indicado en la celda contigua de la columna A) ha entregado su parte de trabajo.
Lo que pretendo con la fórmula es que si $C16 es, por ej., Jose Perez, me lo busque en el rango de operarios FORMULARIO! $A$12:A$1502 Y SIMULTÁNEAMENTE me busque la fecha indicada en $D$14 (por ej, 12/06/02) en el rango de fechas FORMULARIO! $B$12:$B$1502 y me devuelva "FALTA" o "O.K." en función de si el operario en cuestión ha entregado su parte en la fecha indicada.
Mi error está en lo siguiente: en ningún momento le indico a la fórmula que ambas condiciones deben cumplirse simultáneamente para la misma fila del "binomio" A y B de la hoja FORMULARIO.
Así, si Jose Perez ha entregado un parte de trabajo el 05/06/02 y Juan García lo ha entregado el 12/06/02, la fórmula me devolverá "O.K." porque habrá encontrado a Jose Perez en FORMULARIO! $A$12:A$1502 y 12/06/02 en FORMULARIO! $B$12:$B$1502.
Sin embargo, Jose Perez no ha entregado su parte el 12/06/02.
Fernando, ¿cómo podemos hacer que la fórmula "vea" que las dos condiciones deben cumplirse simultáneamente para la misma fila de la hoja FORMULARIO?
Agradezco de antemano tu ayuda pues estoy desesperado.
Un fuerte abrazo,
Hans.

1 respuesta

Respuesta
1
Hi, Hans!
Vamos con la primera:
Como su nombre lo indica, un Textbox supone que recibirá un texto. De todos modos la función Val() de VBA devolverá donde lo necesites lo ingresado como número.
Así la solución directa sería:
Private Sub CommandButton1_Click()
Sheets("FORMULARIO").Select
Range("A2").Value = Val(TextBox1)
Unload Me
End Sub
Una solución un tanto más elaborada, sería:
Private Sub CommandButton1_Click()
Dim val2sht As Long
val2sht = Val(TextBox1)
If val2sht <> 0 Then
Sheets("FORMULARIO").Select
Range("A2").Value = val2sht
Else
MsgBox "Datos en TextBox1 vacío o no numérico", vbCritical, "Error de carga"
Unload Me
UserForm1.Show
End If
Unload Me
Application.WindowState = xlNormal
End Sub
Donde se carga en una variable y se controla que el dato sea numérico...
----
En cuanto a la segunda cuestión, primero, te recomendaría que uses un código de identificación del empleado en lugar de su nombre, ya que éste puede estar escrito de diferentes maneras y, por ello, hacer fracasar la búsqueda.
De todos modos, la solución más simple es agregar un campo auxiliar a la izquierda de tu base donde se concatenen Nombre y Fecha, con una fórmula como esta:
=ESPACIOS(MAYUSC($A12)&"-"&TEXTO($B12;"dd-mm-aaaa"))
Luego copias esta fórmula hacia abajo, una por cada registro en tu base.
Luego tu fórmula de control será:
=SI(ESNOD(COINCIDIR(ESPACIOS(MAYUSC($C16)&"-"&TEXTO($D$14;"dd-mm-aaaa"));FORMULARIO!$A$12:$A$1502;0));"FALTA";"OK")
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
Un gran abrazo! (Y gracias por los conceptos)
Aclarando qué entendí mal o qué faltó.
Fernando:
Cualquier expresión que utilice se quedará corta para expresarte mi admiración por tu profesionalidad: haces sencillo lo muy complejo.
Creo que eso se llama BRILLANTEZ.
Muchas gracias por todo y, además, por la prontitud en tu respuesta.
Un fuerte abrazo,
Hans.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas