Macro para calcular semanas de fecha a fecha

Para Dante

Saludos

Que tal

Fijate que te quiero molestar con esto

Tengo este codigo que uso para agregar informacion:

'aqui es cuando agregamos

    Application.ScreenUpdating = False

    ActiveCell = cbo_nombre

    ActiveCell.Offset(0, 1) = comunidad

    ActiveCell.Offset(0, 2) = fecha_nac

    ActiveCell.Offset(0, 4) = fur

    ActiveCell.Offset(0, 5) = fpp

    ActiveCell.Offset(0, 6) = pri_con

    ActiveCell.Offset(0, 8) = seg_con

    ActiveCell.Offset(0, 10) = ter_con

    ActiveCell.Offset(0, 12) = cua_con

    ActiveCell.Offset(0, 14) = qui_con

    ActiveCell.Offset(0, 16) = sex_con

    ActiveCell.Offset(0, 18) = sep_con

    ActiveCell.Offset(0, 20) = oct_con

    ActiveCell.Offset(0, 22) = nov_con

Y lo que busco es que me calcule con macro cuantas semanas hay entre fur y pri-con (ejemplo: fur seria 10/06/2014 y pri_con 20/08/2014) quiero saber cuantas semanas hay entre la primera fecha (10/06/2014) y la segunda (20/08/2014) y me coloque el resultado en la columna H. (tambien que calcule entre fur y seg_con y lo coloque en la columna J)

Mas o menos seria asi

Calular semanas entre:

Fur y pri_con y colocar el resultado en columna H

Fur y seg_con y colocar el resultado de la columna J

Fur y ter_con y colocar el resultado en la columna L

Fur y cua_con y colocar el resultado en columna N

Fur y qui_con y colocar el resultado de la columna P

Fur y sex_con y colocar el resultado en la columna R

Fur y sep_con y colocar el resultado en columna T

Fur y oct_con y colocar el resultado de la columna V

Fur y nov_con y colocar el resultado en la columna X

Estos resultado deben aparecer en la hoja datos

En esa hoja estoy utilizando esta formula para hacer el calculo

=SI(G5="","",REDONDEAR.MAS(((G5-E5)/7,0))

El resultado de esta formula aparece en la columna H

Donde G5 es pri_con y E5 es fur

Pero cuando quiero agregar un nuevo registro las formulas no se ejecutan y desaparecen.

El userform donde esta el codigo es AGREGAR_D

En el menu que aparace despues de ingresar usuario y contraseña, el boton que uso para agregar informacion dice: MORALES I/MORALES II/MORALES III/NAVAJOA.

Luego en el siguiente userform seleccionas el optionbutton que dice MORALES III

Y luego el boton AGREGAR MORALES III a la derecha del userform.

Este problema tambien sucede cuando quiero modificar el registro.

El cogido para modificar es este:

'Actualizar el registro

Private Sub btn_modificar_Click()

For i = 1 To 24

    ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value

Next i

Dim Ruta As String, Nombre As String, Version As String

Application.StatusBar = "Guardando BACKUP..."

Ruta = "C:\Users\RON\Documents\listados"

Nombre = Left(ActiveWorkbook.Name, 12) + " " + Format(Now, "yyyy.mm.dd hh.mm") & " bp.xlsm"

'Ruta = ActiveWorkbook.Path

'Nombre = Left(ActiveWorkbook.Name, 13) & "_BP.xlsm"

ActiveWorkbook.SaveCopyAs Filename:=Ruta & "\" & Nombre

Application.StatusBar = False

'Application.DisplayAlerts = False

'Application.EnableEvents = False

ActiveWorkbook. Save

Unload Me

End Sub

'

'Cerrar formulario

Private Sub btn_Salir_Click()

Unload Me

End Sub

'Llenar los cuadro de texto con los datos del registro elegido

Private Sub userform_initialize()

EliminarTitulo Me.Caption

Me.Height = Me.Height - 20

For i = 1 To 24

    Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value

Next i

End Sub

El userform se llama: frmmodi

Aqui sucede lo mismo, modifico un registro y la formula desaparece.

Te envie el archivo con usuario y contraseña por correo

2 respuestas

Respuesta
1

Disculpa, la hoja donde debe aparecer el resultado es la hoja datos3 que es donde aparecen los registros ingresados y modificados, el userform AGREGAR_D corresponde a esa hoja.

Media vez este la macro para calcular las semanas de esa hoja, yo voy a agregárselo a los userform que corresponden a las hojas datos, datos2 y datos4. Sino es así no aprendo nada.

Respuesta
1

Para calcular las semanas, después de esta línea

ActiveCell.Offset(0, 6) = pri_con

agrega lo siguiente a tu código

    ActiveCell.Offset(0, 7) = Application.RoundUp((CDate(pri_con) - CDate(fur)) / 7, 0) 'calula semanas

Saludos.Dante Amor

Hola

Fíjate que si ingreso un control corre la fórmula, y luego le doy guardar me marca error en la siguiente (en negrita), lo mismo si ingreso dos o tres controles me da error en la siguiente fórmula del siguiente control.

'Aquí es cuando agregamos
Application.ScreenUpdating = False
ActiveCell = cbo_nombre
ActiveCell.Offset(0, 1) = comunidad
ActiveCell.Offset(0, 2) = fecha_nac
ActiveCell.Offset(0, 4) = fur
ActiveCell.Offset(0, 5) = fpp
ActiveCell.Offset(0, 6) = pri_con
ActiveCell.Offset(0, 7) = Application.RoundUp((CDate(pri_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 8) = seg_con
ActiveCell.Offset(0, 9) = Application.RoundUp((CDate(seg_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 10) = ter_con
ActiveCell.Offset(0, 11) = Application.RoundUp((CDate(ter_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 12) = cua_con
ActiveCell.Offset(0, 13) = Application.RoundUp((CDate(cua_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 14) = qui_con
ActiveCell.Offset(0, 15) = Application.RoundUp((CDate(qui_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 16) = sex_con
ActiveCell.Offset(0, 17) = Application.RoundUp((CDate(sex_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 18) = sep_con
ActiveCell.Offset(0, 19) = Application.RoundUp((CDate(sep_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 20) = oct_con
ActiveCell.Offset(0, 21) = Application.RoundUp((CDate(oct_con) - CDate(fur)) / 7, 0) 'calula semanas
ActiveCell.Offset(0, 22) = nov_con
ActiveCell.Offset(0, 23) = Application.RoundUp((CDate(nov_con) - CDate(fur)) / 7, 0) 'calula semanas

Debes asegurar que en los textbox: "ter_con" tengas una fecha

El asunto es que los controles se ingresan uno cada cierto tiempo.

Ejem. Hoy ingreso el primero y se debe calcular la semana, luego el siguiente puede ser al mes siguiente o tal vez nunca se vuelva a ingresar otro y el registro se queda solo con un control.

Los textbox de los controles que no se ingresen van a quedar en blanco y la fórmula entonces no debería correr.

Deberías considerar que eso es una nueva petición, para que generes una nueva pregunta: Validar que los textbox de fecha tengan una fecha.

Te anexo el ejemplo del código:

ActiveCell.Offset(0, 4) = fur
ActiveCell.Offset(0, 5) = fpp
ActiveCell.Offset(0, 6) = pri_con
'
If pri_con <> "" And fur <> "" And IsDate(pri_con) And IsDate(fur) Then
    ActiveCell.Offset(0, 7) = Application.RoundUp((CDate(pri_con) - CDate(fur)) / 7, 0) 'calula semanas
End If
'
ActiveCell.Offset(0, 8) = seg_con
If seg_con <> "" And fur <> "" And IsDate(seg_con) And IsDate(fur) Then
    ActiveCell.Offset(0, 9) = Application.RoundUp((CDate(seg_con) - CDate(fur)) / 7, 0) 'calula semanas
End If
'
ActiveCell.Offset(0, 10) = ter_con
If ter_con <> "" And fur <> "" And IsDate(ter_con) And IsDate(fur) Then
    ActiveCell.Offset(0, 11) = Application.RoundUp((CDate(ter_con) - CDate(fur)) / 7, 0) 'calula semanas
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas