![]() |
#1
|
|||
|
|||
![]()
How to configure Date Picker Content Control to display date with ordinal number?
eg. 14 July 2011 to 14th July 2011 (with correct superscript text size and positioning, can't get it to work in this post) |
#2
|
||||
|
||||
![]()
Hi areriff,
You could name the Content Control 'Mydate' add the following code to the document's 'This Document' module: Code:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) Dim i As Long, j As String, Rng As Range With ContentControl If .Type <> wdContentControlDate Then Exit Sub If .Title = "MyDate" Then If .ShowingPlaceholderText Then Exit Sub .Type = wdContentControlRichText Set Rng = .Range For i = 0 To UBound(Split(.Range.Text, " ")) j = Split(.Range.Text, " ")(i) If IsNumeric(j) Then With Rng .Start = .Start + InStr(ContentControl.Range.Text, j) + Len(j) - 1 .End = .Start .InsertAfter Ordinal(Val(j)) .Font.Superscript = True End With .Type = wdContentControlDate Exit For End If Next End If End With End Sub Function Ordinal(Val As Integer) As String Dim strOrd As String If (Val Mod 100) < 11 Or (Val Mod 100) > 13 Then strOrd = Choose(Val Mod 10, "st", "nd", "rd") & "" Ordinal = IIf(strOrd = "", "th", strOrd) End Function For PC macro installation & usage instructions, see: Installing Macros For Mac macro installation & usage instructions, see: Word:mac - Install a Macro
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
![]()
That code mostly works, except there's a bug that means it ruins all date pickers in the document.
I reordered it slightly: Code:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) Dim i As Long, j As String, Rng As Range With ContentControl If .Type <> wdContentControlDate Then Exit Sub If .Title = "MyDate" Then .Type = wdContentControlRichText Set Rng = .Range For i = 0 To UBound(Split(.Range.Text, " ")) j = Split(.Range.Text, " ")(i) If IsNumeric(j) Then With Rng .Start = .Start + InStr(ContentControl.Range.Text, j) + Len(j) - 1 .End = .Start .InsertAfter Ordinal(Val(j)) .Font.Superscript = True End With Exit For End If Next .Type = wdContentControlDate End If End With End Sub Last edited by Piet Bourke; 08-18-2022 at 07:49 PM. Reason: Found additional improvements, undo customisation |
#4
|
||||
|
||||
![]()
I fail so see how that is possible.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
![]()
The original code initially changed all date pickers to rich text controls, and then attempted to change them back to date pickers once the date had been changed to an ordinal.
".Type = wdContentControlDate" needed to be moved into a later IF statement to actually do so. I also moved ".Type = wdContentControlRichText" so it would only change the relevant date pickers, but that was really just because, more than out of necessity. To be fair, I can't see why it actually didn't work for me without the changes, I'm just happy now it does. If it makes any difference, the date I was transforming to an ordinal was formatted simply as "d", rather than the day-month-year format posed in the original question. I ran it in Office 2016, if that makes any difference. |
#6
|
||||
|
||||
![]()
No, that is not how it works. As written, the code can only apply to the date-picker content control being exited, and only then if it is titled 'MyDate'.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
![]() |
Tags |
ordinal date superscript |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
nashville | Word | 16 | 04-06-2012 04:12 AM |
Calculations using values from date picker controls | Inkarnate | Word | 0 | 06-09-2010 07:16 AM |
Word 2007 date and time picker | dmcohio | Word | 2 | 04-09-2010 04:13 AM |
![]() |
louq | Word | 1 | 10-22-2009 09:29 AM |
Date format always interpreted as a formula | Butch Jackman | Excel | 1 | 02-14-2006 11:27 AM |