![]() |
|
#1
|
||||
|
||||
![]()
The field code solution proposed by Charles probably isn't suitable in this case, as you're using a date picker content control - not a formfield - and you'd require a ContentControlOnExit macro to trigger the field updates. And, since you'll require such a macro, you'd probably do better to avoid the field coding altogether and instead use a ContentControlOnExit macro in the 'ThisDocument' code module of the document or its template, coded along the lines of:
Code:
Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean) Application.ScreenUpdating = False Dim Dt As Date, StrDt As String With CCtrl If .Title <> "StartDate" Then Exit Sub If .ShowingPlaceholderText = True Then ActiveDocument.SelectContentControlsByTitle("DateOffset1")(1).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset2")(1).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset2")(2).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset3")(1).Range.Text = "Pending" Else StrDt = .Range.Text If IsDate(StrDt) Then Dt = CDate(StrDt) Else Dt = CDate(Split(StrDt, (Split(StrDt, " ")(0)))(1)) End If ActiveDocument.SelectContentControlsByTitle("DateOffset1")(1).Range.Text = Format(Dt + 7, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset2")(1).Range.Text = Format(Dt + 14, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset2")(2).Range.Text = Format(Dt + 14, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset3")(1).Range.Text = Format(Dt + 21, .DateDisplayFormat) End If End With Application.ScreenUpdating = True End Sub See attached demo. If you wanted to have offsets that might fall on weekends, but the calculated date should fall on the previous Friday or following Monday, you could use something like: Code:
Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean) Application.ScreenUpdating = False Dim Dt As Date, StrDt As String, i As Long With CCtrl If .Title <> "StartDate" Then Exit Sub If .ShowingPlaceholderText = True Then ActiveDocument.SelectContentControlsByTitle("DateOffset1")(1).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset2")(1).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset2")(2).Range.Text = "Pending" ActiveDocument.SelectContentControlsByTitle("DateOffset3")(1).Range.Text = "Pending" Else StrDt = .Range.Text If IsDate(StrDt) Then Dt = CDate(StrDt) Else Dt = CDate(Split(StrDt, (Split(StrDt, " ")(0)))(1)) End If Select Case Dt Mod 7 Case 0: i = -1 'Saturday to Friday Case 1: i = 1 'Sunday to Monday Case Else: i = 0 End Select ActiveDocument.SelectContentControlsByTitle("DateOffset1")(1).Range.Text = Format(Dt + 9 + i, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset2")(1).Range.Text = Format(Dt + 14, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset2")(2).Range.Text = Format(Dt + 14, .DateDisplayFormat) ActiveDocument.SelectContentControlsByTitle("DateOffset3")(1).Range.Text = Format(Dt + 23 + i, .DateDisplayFormat) End If End With Application.ScreenUpdating = True End Sub To make both dates Friday, change: Case 1: i = 1 'Sunday to Monday to: Case 1: i = -2 'Sunday to Friday To make both dates Monday, change: Case 0: i = -1 'Saturday to Friday to: Case 0: i = 2 'Saturday to Monday
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
![]() |
Tags |
word 2010; |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
lucky16 | Word VBA | 2 | 07-01-2016 01:14 PM |
Possible to link a date picker to another date picker? | tubbz | Word | 0 | 05-07-2014 01:23 PM |
Default dates for a Date Picker | BoringDavid | Word VBA | 2 | 09-11-2013 01:42 AM |
![]() |
Andy2011 | Word VBA | 4 | 11-24-2012 10:07 PM |
Date picker | trintukaz | Excel | 0 | 12-30-2011 12:42 AM |