Automatically insert captions to every chart or Image in a Word document in seconds - Detailed guide
HTML-код
- Опубликовано: 11 сен 2024
- Automatically insert captions to every chart or Image in a Word document in seconds using some VBA - Detailed guide
You probably already know how to insert a caption to a chart or an image in a Word document. From the References tab, you click on Insert Caption and you can select the label that you would like to use. If you only have a couple of charts, it is not a problem, and with a few clicks you are all set.
But, what if you are working with a document with dozens of charts or images. The process soon becomes boring, tedious and time-consuming. Following this guide, and copying and pasting the VBA code you will find in the description, you can add captions to dozens of charts or images in a matter of seconds!
Go to the developer tab. If the developer tab is not visible on the ribbon, go to File, then Options, Customize Ribbon, and in the Main Tabs menu make sure that Developer is checked. Right click on Modules, and select Insert, and then New Module. Copy and paste the following VBA code, and click the green button in the taskbar, or click on Run, and then Run Sub/Userform. In just a few seconds, with minimal work, you inserted a caption to every chart in your Word document.
If you want to add a caption to every image in a document, simply replace wdInlineShapeChart with wdInlineShapePicture. If you want the caption below the image or the chart, simply change wdCaptionPositionAbove to wdCaptionPositionBelow. This also applies to charts as well.
Optionally, you can also set the font, font color and font size of the caption by changing the captions style. Here I set each caption to Times New Roman, size 10, black and bold. This also applies to charts.
What this code does is loop through every inline shape in the document, determines if it’s a chart, or an image if you want to add captions to images, then adds a caption to each chart or image in the document using the InsertCaption method, setting the Label, its Title and its position.
You will find all the VBA code in the description.
If you have any questions let me know in the comments.
VBA Code to insert a caption to every chart in a Word document
Sub AddCaptions()
Dim intCount As Integer
Dim i As Integer
'loop through inline shapes
For i = 1 To ActiveDocument.InlineShapes.Count
'check if the current shape is a chart
If ActiveDocument.InlineShapes.Item(i).Type = _
wdInlineShapeChart Then
''assign a caption to the chart
ActiveDocument.InlineShapes.Item(i).Select
Selection.InsertCaption Label:="Figure", _
Title:=". ", _
Position:=wdCaptionPositionAbove
'the above line sets the position of the caption, if you want the caption below the chart change it to wdCaptionPositionAbove
End If
Next i
'Optional, remove if you don't want to change the style of the caption
With ActiveDocument.Styles("Caption").Font
.Name = "Times New Roman"
.Size = 10
.Italic = False
.Bold = True
.ColorIndex = wdBlack
End With
End Sub
VBA Code to insert a caption to every image in a Word document
Sub AddCaptions()
Dim intCount As Integer
Dim i As Integer
'loop through inline shapes
For i = 1 To ActiveDocument.InlineShapes.Count
'check if the current shape is an image
If ActiveDocument.InlineShapes.Item(i).Type = _
wdInlineShapePicture Then
'insert a caption above the image
ActiveDocument.InlineShapes.Item(i).Select
Selection.InsertCaption Label:="Figure", _
Title:=". ", _
Position:=wdCaptionPositionAbove
'the above line sets the position of the caption, change the position to wdCaptionPositionAbove if you want the caption below
End If
Next i
With ActiveDocument.Styles("Caption").Font
.Name = "Times New Roman"
.Size = 10
.Italic = False
.Bold = True
.ColorIndex = wdBlack
End With
End Sub
Thank you SO much for this. I'm working on a 150 page document with hundreds of images and the auto numbering on the captioning was driving me crazy! This is SO helpful!!!
Quick question for you - If I add images to the document later, how can I "refresh" the image numbers so that they're updated? (When I tried to run the script again, it just added another set of captions, so I had two captions for every image) :(
Also, is there a quick way to wipe out all captions that are already in the file?
You are welcome. Yeah, adding captions to a long document with many images is time-consuming and boring, that's why i developed this code.
About your first question, i need to update the code so that it checks if a caption already exists. I will look into it, but it might take some time. Try to select a caption (make sure that the entire caption, including the number is selected) , right click and select Update Field. It could work. Let me know if it worked.
No, there is no quick way to wipe out all the captions in a file.
Hi there, great video! Is there a way to have the macro scan a range of pages rather than the whole document?
Hi, and thanks! You can scan only a range of pages if you create a section in that range and then run the macro, properly adjusted of course. Afterwards you can remove the section, if you'd like.
Let me know if you would like to tell you how. I haven't tested it, to be honest, but i don't see a reason why it should not work. Maybe you can do it for a range of pages without creating a section of course, but I will have to look into it.
Good luck!
@@winoffice I'm not the most familiar with MS Visual Basic unfortunately. Absolutely no rush, let me know if you find something that works and I will Google around on my end.
@@geoffreyquipse6061 Ok, i will look into it and let you know.
I have one issue. I have hundred images captioned manually. But later I came to know that we can auto caption images. I regret myself for learning things too late.
So the problem is I am not able to insert table of figures because I added captions manually. Is there any way to insert table of figures even if I gave captions manually? All images have different captions and it will be even tiring and time consuming to convert manual captions into auto captions.
If you had used a caption, even if added manually, of course you would be able to add a table of figures. That's the usual way, i just provided a way to automate it.
But, if you just added text above your images, and not an actual caption, you can't insert a table of figures automatically. I'll have to see if code can actually use the text in the paragraph above an image and use it as the caption text. It could take some time, though. I'm no VBA expert, i just share tips and some code from my work.
Thank You very much, what about autoCaption for Tables
You are welcome. For tables check my other video about tables specifically, here: studio.ruclips.net/user/videoAKCsw4HFKmc/edit
I was able to caption so many charts at once in my research document, Thank You
That's great! You are welcome!
Is it possible to add captions on specific positions? For example only when the letter configuration "xyz" is visible?
It's possible to do many things, VBA is quite powerful. But, the more complex the task, the more complex the code. Not sure what you mean by when a certain letter configuration is visible.
How to add captions for table? chart doesn't work.
See my other video specifically for tables and check the description for the code.
Well thank you sir
Welcome!
Thanks for your post, do you know the command line if I want to centrally align the figure name?
Hi. After you assign the label in your VBA code add the following code:
Selection.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
@@winoffice it worked thankyou. Just there is a "full stop" at the end of the Figure label which I am trying to get rid off. For example, Figure 1-21.
I added the period in the code after the figure number, because this is how i usually format my figure labels. Notice the line:
Title:=". ", _
note the period between the quotation marks. Remove the period and just leave the quotation marks and, voila, the period is gone from your labels. Good luck.
wow thankyou so much@@winoffice
You are welcome @sumayya9131 . Glad i could help!
Didn't work! Dislike...