Fórmula activa

Veo en las respuestas que te consultan mucho, y aprendo cada día más, de todas las preguntas que hacen.
¿Mi consulta es como puedo hacer para que en un formulario realizado en VBA pueda yo restar dos fechas? Una de nombre txtFIncial y txtFDirec, pero que esta se calcule o se de instantáneamente con solo introducir los datos, ¿me explico? No que uno de un clic para tener el resultado sino tenerlo inmediatamente, ¿me explico? Y le otro problema que me surge es que la diferencia es con respecto a días hábiles, en una hoja electrónica se que uso Días.lab y lo obtendría pero en el formulario no tener idea de como plantearlo, ¿me puedes ayudar?

1 respuesta

Respuesta
1
En realidad la función Días.Lab no es nativa de MS Excel Standard y la obtienes del paquete de análisis (Analisys Toolpak) que viene en el CD.
Estimo yo que debe haber alguna sintaxis que la haga funcionar dentro de Visual Basic, tipo:
Application.Run "ATPVBAEN.XLA!NETWORKDAYS", "7/2/2002", "17/2/2002", False
Pero no pude dar con ella.
(Tal vez en la documentación del paquete se pueda encontrar).
Sin embargo, como quien no se da por vencido desarrollé esta solución que involucra volcar en algunas celdas auxiliares (colocadas en cualquier parte de la hoja) ambas fechas y que la fórmula (en la hoja) devuelva en un "Label" el resultado.
Obviamente también está resuelto que esto ocurra apenas ingresas el último dígito del año en la segunda TextBox.
Entonces, Gerardo, en una celda de tu planilla, ingresa la fórmula:
=SI(O(ESBLANCO(A1);ESBLANCO(A2));0;DIAS.LAB(A1;A2))
Siendo A1 y A2 las celdas que recibirán las fechas de tu formulario.
Agrega a él un LabelBox (Label1) y en el panel de códigos de tu formulario, pega este código:
Private Sub txtFDirec_Change()
If InStr(4, txtFDirec, "/") <> 0 And Len(txtFDirec) - InStr(4, txtFDirec, "/") = 4 Then
Application.ScreenUpdating = False
Worksheets("Hoja1").Range("A1").Value = Format(txtFIncial.Value, "dd/mm/yyyy")
Worksheets("Hoja1").Range("A2").Value = Format(txtFDirec.Value, "dd/mm/yyyy")
Worksheets("Hoja1").Calculate
Application.ScreenUpdating = True
Label1.Caption = Worksheets("Hoja1").Range("A3").Value
End If
With Worksheets("Hoja1")
.Range("A1").ClearContents
.Range("A2").ClearContents
End With
End Sub
El código como verás está asociado al evento de cambio en el segundo text box, pero controlado hasta que se ingresa el año (tiene que haber dos barras separadoras y el año debe ser tipeado con sus 4 dígitos)
Hasta donde lo probé funciona muy bien. Obviamente, puedes cambiar las direcciones de celdas si lo necesitas.
Un gran abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas