Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

funcion fin.mes pero con vba

4,803 views
Skip to first unread message

Yrjo, Inc.

unread,
Jul 1, 2009, 5:36:23 PM7/1/09
to

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

H�ctor Miguel

unread,
Jul 1, 2009, 6:18:42 PM7/1/09
to

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.


jose

unread,
Jul 1, 2009, 6:17:01 PM7/1/09
to

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

jose

unread,
Jul 1, 2009, 6:26:01 PM7/1/09
to

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

Yrjo, Inc.

unread,
Jul 2, 2009, 7:48:01 AM7/2/09
to

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

"Héctor Miguel" wrote:

> UltimoDia = Day(DateSerial(año, mes + 1, 0))
>
> saludos,
> hector.
>
>
>

EMarín

unread,
Oct 9, 2009, 12:03:01 AM10/9/09
to
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ó:

H�ctor Miguel

unread,
Oct 9, 2009, 12:43:39 AM10/9/09
to
hola, !

> Hola, llegue tarde a la discusion... pero no importa
> En VBA existe la siguiente funcion, que me parece mas practica:
> WorksheetFunction.EoMonth(....)

(por lo que pudiera valer y hasta donde se...) esas funciones (las del complemento de herramientas para analisis)
no estan disponibles para vba en las versiones previas a la 2007 (al menos, dentro de la coleccion de las worksheetfunctions)
por si pudieras comentar como y en que version has hecho tus pruebas ?

saludos,
hector.

__ OP __ (julio 2009) __

0 new messages