Excel Запуск макросов в последнюю неделю месяца - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно вызвать определенную функцию, если это последняя неделя текущего месяца.Как:

    if  today = 31/09/2018 - 7 days 
    call function1
    end if 

Как я могу это сделать?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Зависит от того, как вы определите свою работу частично.Вы можете использовать EOMONTH, чтобы получить конец месяца, а затем DATEADD, чтобы удалить неделю.Я добавил + 1, чтобы перейти на 7 дней до конечной точки включения.

Option Explicit
Public Sub test()
    Dim d As Long
    d = CLng(Date)

    If d >= DateAdd("ww", -1, Application.WorksheetFunction.EoMonth(d, 0)) + 1 And d <= Application.WorksheetFunction.EoMonth(d, 0) Then
        Call yourSub
    End If   
End Sub

Как функция:

Option Explicit
Public Sub test()
    Dim d As Long
    d = CLng(Date)
    If IsInLastWeek(d) Then
        'Call yourSub
        MsgBox "We made it!"
    End If
End Sub
Public Function IsInLastWeek(ByVal datum As Long) As Boolean
    If datum >= DateAdd("ww", -1, Application.WorksheetFunction.EoMonth(datum, 0)) + 1 And datum <= Application.WorksheetFunction.EoMonth(datum, 0) Then
        IsInLastWeek = True
    End If
End Function
0 голосов
/ 25 сентября 2018

Прежде всего, вам нужно определить, какой последний день месяца.Поэтому вы можете использовать функцию GetLastDayOfMonth, как показано ниже.

Затем вам нужно вычислить разницу между сегодняшним днем ​​и LastDayOfMonth, чтобы проверить, меньше ли она или равна 7 дням.

Option Explicit

Public Sub IsTodayInLastWeekOfMonth()
    Dim LastDayOfMonth As Date
    LastDayOfMonth = GetLastDayOfMonth(Date) 'Date is always the date of today

    Dim DayDifference As Long
    DayDifference = DateDiff("d", Date, LastDayOfMonth)

    If DayDifference >= 0 And DayDifference <= 7 Then
        'today is less then 7 days from the end of month
    End If
End Sub

Public Function GetLastDayOfMonth(inputDate As Date) As Date
    Dim dYear As Integer
    dYear = Year(inputDate)

    Dim dMonth As Integer
    dMonth = Month(inputDate)

    GetLastDayOfMonth = DateSerial(dYear, dMonth + 1, 0)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...