2013-10-16 3 views
0

나는 아래와 같은 함수를 가지고 있습니다. 서브 루틴으로 변환해야합니다. 서브 루틴 내부에서이 함수를 호출 할 수있는 방법이 있습니까?함수를 서브 루틴으로 변환하기 vba

'function to calculate nth specific last day of a month like last saturday or last monday 

Function LastDayOfMonth(Which_Day As String, Which_Date As String) As Date 

    Dim i As Integer 
    Dim iDay As Integer 
    Dim iDaysInMonth As Integer 
    Dim FullDateNew As Date 

    Which_Date = CDate(Which_Date) 

    Select Case UCase(Which_Day) 
     Case "SUN" 
      iDay = 1 
     Case "MON" 
      iDay = 2 
     Case "TUE" 
      iDay = 3 
     Case "WED" 
      iDay = 4 
     Case "THU" 
      iDay = 5 
     Case "FRI" 
      iDay = 6 
     Case "SAT" 
      iDay = 7 
    End Select 

    iDaysInMonth = Day(DateAdd("d", -1,DateSerial(Year(Which_Date),Month(Which_Date)+ 1, 1))) 
    FullDateNew = DateSerial(Year(Which_Date), Month(Which_Date), iDaysInMonth) 

    For i = 0 To iDaysInMonth 
     If Weekday(FullDateNew - i) = iDay Then 
      LastDayOfMonth = FullDateNew - i 
      Exit For 
     End If 
    Next i 
End Function 
+0

당신은 그냥 "하위"과 "기능"을 대체 할 수있는,하지만 난 당신의 질문에 더가 있다는 느낌이 ... – Joe

+0

그래 당신은 그것을 두 가지를 할 수 있습니다. 그러나 그것을 함수로 유지하고 그것을 서브 루틴이라고 부르는 것은 좋을 것입니다. 서브 루틴의 내부에서 간단히'Ret = LastDayOfMonth (param1, parm2)'라고 말하십시오. –

+0

감사합니다. Siddharth.it worked .. –

답변

1
sub callit() 
    Dim d as Date 
    d = LastDayOfMonth(...) 
end sub 
+0

+1 예! 나는이 시간에 당신을 때려 : –

+1

@SiddharthRout - 내 타이핑 속도로 작동하고 30 초간 면도해야합니다 ... –

관련 문제