#1
|
|||
|
|||
Selecting a Date in Date Picker and Having it change dates throughout
I am trying to insert a date picker in a word 2010 document that has several tables in it. I want to be able to select the date picker at the top of the page and have it change dates at the top of each table by a selected number of days. I have scoured through all the tutorials and cant find an answer. I can do this easily in Adobe Acrobat however, the document doesnt expand to fit extra text if needed, without reworking the entire document. |
#2
|
|||
|
|||
This is far from a trivial task.
You can either use the Publish Date Document Property Content Control (which you can customize) and repeat it or you can bookmark the control and refer to its results in complex fields. Here is a copy of one such field, just to give you an idea of the complexity. { QUOTE "{ SET " Delay" "14" } { SET "DaysInMonth" { IF { CreateDate \@ "MM" } <> 2 { = ROUND(30.575*{ CreateDate \@ "MM" },0)- ROUND(30.575*{ = { CreateDate \@ "MM" } -1 },0) } { IF { = MOD( { CreateDate \@"yy" } , 4 ) } > 0 "28" "29" } } } { SET "NextMonth" { IF { CreateDate \@ "MM" } = 12 "1/97" "{ = { CreateDate \@ "MM"} + 1 }/97 } } { IF { = { REF "Delay" } + { CreateDate \@ "dd" } } <= {REF"DaysInMonth"} {CreateDate \@ "MMMM { = { REF "Delay" } + { CreateDate \@ "dd" } }, yyyy"}{ QUOTE { NextMonth \@ "MMMM" } { = { REF "Delay" } + { CreateDate \@ "dd" } - { REF"DaysInMonth" } }, { IF { CreateDate \@ "MM" } <> 12 { CreateDate \@ "yyyy" } { CreateDate \@ "{ = 1 + { CreateDate \@ "yyyy" } \# "xxxx" }" } } } }" } You would be using a copy of the Publish Date control or a REF field to the bookmark instead of CreateDate in your fields. Luckily, Paul Edstein has compiled a tutorial that is a Word document with a compendium of such fields that you can copy and change to fit. Be sure to read the introductory material. You can find it here: https://www.msofficeforums.com/word/...-tutorial.html The reason for using the Publish Date Document Property control instead of your own is explained here: Repeating Data Using Document Properties Content Controls and Other Mapped Content Controls |
#3
|
||||
|
||||
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 Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Date picker content control to always show current date. | 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 |
Date Picker | Andy2011 | Word VBA | 4 | 11-24-2012 10:07 PM |
Date picker | trintukaz | Excel | 0 | 12-30-2011 12:42 AM |