funcion fin.mes pero con vba

01/07/2009 - 23:36 por Yrjo, Inc. | Informe spam
Buenas tardes, necesito hacer la misma operación que utilizo con la función
fin.mes pero con vba.

v.g.
=DIA(FIN.MES("03/07/2009";0)) da como resultado 31
=DIA(FIN.MES("03/02/2009";0)) da como resultado 28

Cuál es la función equivalente a fin.mes con vba?

Muchas gracias por la ayuda

Jorge M

Preguntas similare

Leer las respuestas

#1 jose
02/07/2009 - 00:17 | Informe spam
Public Function FinMes(InputDate As Date, Optional MonthsToAdd As Integer)
Dim TotalMonths As Integer
Dim NewMonth As Integer
Dim NewYear As Integer

If IsMissing(MonthsToAdd) Then
MonthsToAdd = 0
End If

TotalMonths = Month(InputDate) + MonthsToAdd
NewMonth = TotalMonths - (12 * Int(TotalMonths / 12))
NewYear = Year(InputDate) + Int(TotalMonths / 12)

If NewMonth = 0 Then
NewMonth = 12
NewYear = NewYear - 1
End If

Select Case NewMonth
Case 1, 3, 5, 7, 8, 10, 12
FinMes = DateSerial(NewYear, NewMonth, 31)
Case 4, 6, 9, 11
FinMes = DateSerial(NewYear, NewMonth, 30)
Case 2
If Int(NewYear / 4) = NewYear / 4 Then
FinMes = DateSerial(NewYear, NewMonth, 29)
Else
FinMes = DateSerial(NewYear, NewMonth, 28)
End If
End Select
End Function



"Yrjo, Inc." wrote:

Buenas tardes, necesito hacer la misma operación que utilizo con la función
fin.mes pero con vba.

v.g.
=DIA(FIN.MES("03/07/2009";0)) da como resultado 31
=DIA(FIN.MES("03/02/2009";0)) da como resultado 28

Cuál es la función equivalente a fin.mes con vba?

Muchas gracias por la ayuda

Jorge M
Respuesta Responder a este mensaje
#2 Héctor Miguel
02/07/2009 - 00:18 | Informe spam
hola, Jorge !

... necesito hacer la misma operacion que utilizo con la funcion fin.mes pero con vba.
v.g.
=DIA(FIN.MES("03/07/2009";0)) da como resultado 31
=DIA(FIN.MES("03/02/2009";0)) da como resultado 28
Cual es la funcion equivalente a fin.mes con vba?



1) en vba podrias encontrar "detalles" si basas tus fechas en convencionalismos "regionales" (p.e.)
el orden de fechas de TU configuracion regional es: dd/mm/aaaa
vba siempre "prefiere" el orden de fechas US-centric: mm/dd/aaaa
y/o una forma mas "universal" de trabajar con fechas es usar el orden: aaaa/mm/dd

2) para saber el ultimo dia del mes de una fecha, puedes preguntar por "el dia cero del siguiente mes" (p.e.)
UltimoDia = Day(DateSerial(año, mes + 1, 0))

saludos,
hector.
Respuesta Responder a este mensaje
#3 jose
02/07/2009 - 00:26 | Informe spam
me respondo a mi mismo

Function LastOfThisMonth(dtm As Date) As Date
LastOfThisMonth = DateAdd("d", -1, DateSerial(Year(dtm), Month(dtm) + 1,
1))
End Function


"jose" wrote:

Public Function FinMes(InputDate As Date, Optional MonthsToAdd As Integer)
Dim TotalMonths As Integer
Dim NewMonth As Integer
Dim NewYear As Integer

If IsMissing(MonthsToAdd) Then
MonthsToAdd = 0
End If

TotalMonths = Month(InputDate) + MonthsToAdd
NewMonth = TotalMonths - (12 * Int(TotalMonths / 12))
NewYear = Year(InputDate) + Int(TotalMonths / 12)

If NewMonth = 0 Then
NewMonth = 12
NewYear = NewYear - 1
End If

Select Case NewMonth
Case 1, 3, 5, 7, 8, 10, 12
FinMes = DateSerial(NewYear, NewMonth, 31)
Case 4, 6, 9, 11
FinMes = DateSerial(NewYear, NewMonth, 30)
Case 2
If Int(NewYear / 4) = NewYear / 4 Then
FinMes = DateSerial(NewYear, NewMonth, 29)
Else
FinMes = DateSerial(NewYear, NewMonth, 28)
End If
End Select
End Function



"Yrjo, Inc." wrote:

> Buenas tardes, necesito hacer la misma operación que utilizo con la función
> fin.mes pero con vba.
>
> v.g.
> =DIA(FIN.MES("03/07/2009";0)) da como resultado 31
> =DIA(FIN.MES("03/02/2009";0)) da como resultado 28
>
> Cuál es la función equivalente a fin.mes con vba?
>
> Muchas gracias por la ayuda
>
> Jorge M
Respuesta Responder a este mensaje
#4 Yrjo, Inc.
02/07/2009 - 13:48 | Informe spam
Muchas gracias a Jose y Héctor Miguel por la valiosa ayuda

"Héctor Miguel" wrote:

hola, Jorge !

> ... necesito hacer la misma operacion que utilizo con la funcion fin.mes pero con vba.
> v.g.
> =DIA(FIN.MES("03/07/2009";0)) da como resultado 31
> =DIA(FIN.MES("03/02/2009";0)) da como resultado 28
> Cual es la funcion equivalente a fin.mes con vba?

1) en vba podrias encontrar "detalles" si basas tus fechas en convencionalismos "regionales" (p.e.)
el orden de fechas de TU configuracion regional es: dd/mm/aaaa
vba siempre "prefiere" el orden de fechas US-centric: mm/dd/aaaa
y/o una forma mas "universal" de trabajar con fechas es usar el orden: aaaa/mm/dd

2) para saber el ultimo dia del mes de una fecha, puedes preguntar por "el dia cero del siguiente mes" (p.e.)
UltimoDia = Day(DateSerial(año, mes + 1, 0))

saludos,
hector.



Respuesta Responder a este mensaje
#5 EMarín
09/10/2009 - 06:03 | Informe spam
Hola, llegué tarde a la discusión... pero no importa

En VBA existe la siguiente función, que me parece más práctica:

WorksheetFunction.EoMonth()

Saludos

"Yrjo, Inc." escribió:

Muchas gracias a Jose y Héctor Miguel por la valiosa ayuda

"Héctor Miguel" wrote:

> hola, Jorge !
>
> > ... necesito hacer la misma operacion que utilizo con la funcion fin.mes pero con vba.
> > v.g.
> > =DIA(FIN.MES("03/07/2009";0)) da como resultado 31
> > =DIA(FIN.MES("03/02/2009";0)) da como resultado 28
> > Cual es la funcion equivalente a fin.mes con vba?
>
> 1) en vba podrias encontrar "detalles" si basas tus fechas en convencionalismos "regionales" (p.e.)
> el orden de fechas de TU configuracion regional es: dd/mm/aaaa
> vba siempre "prefiere" el orden de fechas US-centric: mm/dd/aaaa
> y/o una forma mas "universal" de trabajar con fechas es usar el orden: aaaa/mm/dd
>
> 2) para saber el ultimo dia del mes de una fecha, puedes preguntar por "el dia cero del siguiente mes" (p.e.)
> UltimoDia = Day(DateSerial(año, mes + 1, 0))
>
> saludos,
> hector.
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida