2016-05-24 3 views
-2

В sheet1 в столбце B я имею имена в листе 1 в колонке D У меня есть даты дня рожденияVBA - MsgBox за 10 дней до дня рождения

B: 
Ben 
Mikael 

D: 
3 MARCH 1987 
3 JUNE 1976 

Я хочу найти сценарий VBA, чтобы сделать всплывающий MsgBox и печать out "Существует 10 дней или меньше, пока НАЗВАНИЕ (из колонки B) не получит день рождения".

Как это можно сделать?

+0

Таким образом, если человек родился * 5 января 1948 * вы хотите следующее сообщение, опубликованное * 26 декабря 2016 года * ?? –

+0

ровно, за 10 дней до того, как у человека будет день рождения. как предупреждение за 10 дней для пользователя документа excel. он должен быть написан на vba – Behedwin

+0

Да, это можно сделать. Вы можете использовать Outlook или хорошую программу календаря для этого. Или вы можете написать макрос, который проверяет даты, и предупреждает вас, если он меньше 10 дней. Недостатком является то, что вам придется открыть этот файл Excel каждый день для запуска макроса. Или вы можете использовать 'Application.OnTime' и никогда не выключать компьютер и никогда не закрывать Excel. – vacip

ответ

1

В E1 введите:

=DATE(YEAR(D1)+DATEDIF(D1,TODAY(),"y")+1,MONTH(D1),DAY(D1)) 

и скопировать вниз. Затем в F1 введите:

=E1-TODAY() 

и скопировать вниз.

Колонка E являются предстоящие дни рождения и колонки F являются дни до следующего дня рождения.

Наконец, в области рабочего листа кода, введите следующий макрос событие:

Private Sub Worksheet_Activate() 
    Dim cel As Range, F As Range 

    Set F = Intersect(ActiveSheet.UsedRange, Range("F:F")) 
    For Each cel In F 
     If cel.Value < 11 Then 
      MsgBox cel.Offset(0, -4).Value & " will have a birthday in " & cel.Value & " days" 
     End If 
    Next cel 
End Sub 

Вы будете получать сообщения каждый раз, когда рабочий лист активированные:

enter image description here

+0

после быстрого чтения вашего сообщения. Я прав, что вы сначала вычислили, сколько дней до следующего дня рождения.Затем в сценарии VBA сообщение всплывающее сообщение, если значение 10 или меньше? – Behedwin

+0

Вы правы! ................ Я использую нечто подобное, но я приветствую имена, используя условное форматирование, а не макросы. –

+0

не могу понять, насколько этот путь лучше моего пути (см. Ниже). есть ли недостатки, чем делать то, что я сделал в коде? – Behedwin

0

Я думаю, что я понял, способ сделать то, что я хотел.

Спасибо за ваш отзыв.

Ниже приведен код, который я должен работать. Но для этого я должен был сначала взять дату рождения и разделить ее на три ячейки, день, месяц и год. , тогда я снова объединяю день и месяц, но не год, вместо этого я использовал год (сейчас()) и получил дату рождения в этом году.

Тогда я мог бы использовать ниже код для добавления 1-10 дней с датой.

это чувствует себя немного неуклюжим ... но пока я думаю, что это сработает.

Sub checkearlybirthday() 
Dim ans As String 
Dim cell As Range 

For Each cell In Sheets("Personal").Range("rf10:rf500") 
    If cell = DateAdd("d", 1, Date) Or cell = DateAdd("d", 2, Date) Or cell = DateAdd("d", 3, Date) Or cell = DateAdd("d", 4, Date) Or cell = DateAdd("d", 5, Date) Or cell = DateAdd("d", 6, Date) Or cell = DateAdd("d", 7, Date) Or cell = DateAdd("d", 8, Date) Or cell = DateAdd("d", 9, Date) Or cell = DateAdd("d", 10, Date) Then 
     ans = ans & vbNewLine & Sheets("Personal").Cells(cell.Row, 2).Value 
    End If 
Next 

If Len(ans) < 1 Then 

Else 
    MsgBox "Hallå! " & vbNewLine & "Det är 10 dagar eller mindre till dessa fyller år. " & ans & " " & vbNewLine & "" 
End If 

End Sub

Смежные вопросы