![]() |
|
|||||||
|
|
|
Thread Tools | Display Modes |
|
#1
|
|||
|
|||
|
Hi,
I am trying to create a christmas gift for my mom. I would like to insert 365 family photos into my word document and run a macro that will sequentially add captioned dates to each image. Basically an image for each day of 2018. example.. photo 1 with caption January 1st 2018 photo 2 with caption January 2nd 2018 etc Any help with this would be very much appreciated. |
|
#2
|
||||
|
||||
|
Without knowing how the images are inserted it is something of a guess, but the following will insert the date in the required format after each image.
Code:
Sub Macro1()
'Graham Mayor - http://www.gmayor.com - Last updated - 02 Nov 2017
Dim iShp As Integer
Dim dStartDate As Date
Dim oRng As Range
Dim strDate As String
dStartDate = "01/01/2018"
For iShp = 1 To ActiveDocument.InlineShapes.Count
strDate = Format((dStartDate + iShp), "mmmm d") & _
DateOrdinal(Format((dStartDate + iShp), "d")) & _
Format((dStartDate + iShp), " yyyy")
Set oRng = ActiveDocument.InlineShapes(iShp).Range
oRng.Collapse 0
oRng.Text = vbCr & strDate & vbCr
Set oRng = oRng.Paragraphs(2).Range
oRng.Font.Size = 24
oRng.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next iShp
lbl_Exit:
Set oRng = Nothing
Exit Sub
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
|||
|
|||
|
Thanks, I tried it.
I get an error saying "DateOrdinal" Compile Error: sub or function not defined. I use insert -> pictures to get the images into my document. |
|
#4
|
||||
|
||||
|
You could add the following function to the same code module you use for Graham's code:
Code:
Function DateOrdinal(Val As Long) 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") & "" DateOrdinal = IIf(strOrd = "", "th", strOrd) End Function
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
|||
|
|||
|
Thanks it works! Just one issue, the first image is dated January 2nd, 2018. Any idea how I can get it to start from January 1st?
|
|
#6
|
||||
|
||||
|
You could change:
dStartDate = "01/01/2018" to: dStartDate = CDate("01/01/2018") - 1
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#7
|
||||
|
||||
|
Here's a slightly different approach that centres the pics horizontally, adds the date to the next line of the same paragraph, and superscripts the ordinals.
Code:
Sub AddPicDatesBelow()
Application.ScreenUpdating = False
Dim iShp As Long, dStartDate As Date, oRng As Range, strOrd As String
dStartDate = CDate("01/01/2018") - 1
With ActiveDocument
For iShp = 1 To .InlineShapes.Count
dStartDate = dStartDate + 1
strOrd = DateOrdinal(Format((dStartDate), "d"))
Set oRng = .InlineShapes(iShp).Range
With oRng
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Collapse wdCollapseEnd
.Text = Chr(11) & Format((dStartDate), "mmmm d") & strOrd & Format((dStartDate), " yyyy") & vbCr
.Start = .Start + 1
.Font.Size = 24
.Start = .Start + InStr(.Text, strOrd) - 1
.End = .Start + 2
.Font.Superscript = True
End With
Next iShp
End With
Set oRng = Nothing
Application.ScreenUpdating = True
End Sub
Function DateOrdinal(Val As Long) 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") & ""
DateOrdinal = IIf(strOrd = "", "th", strOrd)
End Function
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#8
|
||||
|
||||
|
Apologies - I forgot to include the dateordinal function. Paul's alternative should work equally well.
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#9
|
|||
|
|||
|
Thanks alot, it works really well. Is it possible to put the dates above the images instead of below?
|
|
#10
|
||||
|
||||
|
Try:
Code:
Sub AddPicDatesAbove()
Application.ScreenUpdating = False
Dim iShp As Long, dStartDate As Date, oRng As Range, strOrd As String
dStartDate = CDate("01/01/2018") - 1
With ActiveDocument
For iShp = 1 To .InlineShapes.Count
dStartDate = dStartDate + 1
strOrd = DateOrdinal(Format((dStartDate), "d"))
Set oRng = .InlineShapes(iShp).Range
With oRng
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Collapse wdCollapseStart
.Text = vbCr & Format((dStartDate), "mmmm d") & strOrd & Format((dStartDate), " yyyy") & Chr(11)
.Start = .Start + 1
.Font.Size = 24
.Start = .Start + InStr(.Text, strOrd) - 1
.End = .Start + 2
.Font.Superscript = True
End With
Next iShp
End With
Set oRng = Nothing
Application.ScreenUpdating = True
End Sub
Function DateOrdinal(Val As Long) 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") & ""
DateOrdinal = IIf(strOrd = "", "th", strOrd)
End Function
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#11
|
||||
|
||||
|
Change
Code:
oRng.Collapse 0 Code:
oRng.Collapse 1 Code:
Option Explicit
Sub Macro1()
'Graham Mayor - http://www.gmayor.com - Last updated - 02 Nov 2017
Dim iShp As Integer
Dim dStartDate As Date
Dim oRng As Range
Dim strDate As String
dStartDate = "31/12/2017"
For iShp = 1 To ActiveDocument.InlineShapes.Count
strDate = Format((dStartDate + iShp), "mmmm d") & _
DateOrdinal(Format((dStartDate + iShp), "d")) & _
Format((dStartDate + iShp), " yyyy")
Set oRng = ActiveDocument.InlineShapes(iShp).Range
oRng.Collapse 1
oRng.Text = vbCr & strDate & vbCr
Set oRng = oRng.Paragraphs(2).Range
oRng.Font.Size = 24
oRng.ParagraphFormat.Alignment = wdAlignParagraphCenter
Next iShp
lbl_Exit:
Set oRng = Nothing
Exit Sub
End Sub
Private Function DateOrdinal(Val As Long) 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") & ""
DateOrdinal = IIf(strOrd = "", "th", strOrd)
End Function
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#12
|
|||
|
|||
|
Thanks for all your help
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to search for a specific year from a table with year range? | Wii | Excel | 0 | 05-05-2015 12:40 PM |
| How to calculate a rolling year-to-date percentage by quarter as the year progresses | sleake | Excel Programming | 2 | 04-23-2015 11:51 AM |
Need advice on creating new .pst files every year
|
Rockitman31 | Outlook | 1 | 03-02-2013 08:00 AM |
| Creative Ways for a year-to-year comparison??? | ridonkulous5 | Excel | 1 | 03-23-2011 04:49 PM |
| Referencing a Captioned Picture | ComcoDG | Word | 0 | 11-10-2008 04:40 PM |