Would like better understanding of how this macro works.

A

alex20850

I found most of the macro online and made some changes, but I'm not sure of
all of the functions being done.

The macro lets you select a group of graphic files and then inserts them
into a Word table with one graphic per row.

I would appreciate comments on what the different parts of the macro do.

Sub AddPix()
Dim fd As FileDialog

ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1,
NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitContent
With Selection.Tables(1)
.Columns.PreferredWidth = InchesToPoints(4.5)
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = True
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = True
Selection.Rows.HeadingFormat = wdToggle
Selection.Rows.AllowBreakAcrossPages = False
End With



Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = InchesToPoints(0.75)
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = InchesToPoints(5.75)
Selection.Tables(1).Select

Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell

'Creates Header Row
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
'Creates Header Row

'Selection.Tables(1).AutoFitBehavior (wdAutoFitFixed)
'Selection.Tables(1).AutoFitBehavior (wdAutoFitFixed)
'Declare a variable as a FileDialog object.
'Create a FileDialog object as a File Picker dialog box.
Set fd = Application.FileDialog(msoFileDialogFilePicker)

'Declare a variable to contain the path
'of each selected item. Even though the path is a String,
'the variable must be a Variant because For Each...Next
'routines only work with Variants and Objects.
Dim vrtSelectedItem As Variant

'Use a With...End With block to reference the FileDialog object.
With fd
'Add a filter that includes GIF and JPEG images and make it the
second item in the list.
.Filters.Add "Images", "*.gif; *.jpg; *.jpeg"

'Sets the initial file filter to number 2.
.FilterIndex = 2

'Use the Show method to display the File Picker dialog box and return
the user's action.
'If the user presses the action button...
If .Show = -1 Then

'Step through each string in the FileDialogSelectedItems
collection.
For Each vrtSelectedItem In .SelectedItems

'vrtSelectedItem is a String that contains the path of each
selected item.

'Adds blank lines before each picture
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
'Add blank lines before each picture

Selection.InlineShapes.AddPicture FileName:= _
vrtSelectedItem _
, LinkToFile:=False, SaveWithDocument:=True

'Does this create extra row? No
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell

Next vrtSelectedItem
'If the user presses Cancel...
Else
End If
End With
Selection.HomeKey Unit:=wdStory
Selection.Rows.HeadingFormat = wdToggle
Selection.Rows.HeadingFormat = wdToggle
'Set the object variable to Nothing.
Set fd = Nothing

End Sub
 
G

Gordon Bentley-Mix

That's a pretty big chunk of code to try to explain, and I note that 1)
there are some comments in it already, 2) some of the stuff is pretty
self-explanatory, and 3) a lot of it can be worked out just by looking at
the "native" Word functionality that's being invoked programmatically. In
addition, it's *very* messy code (looks like a lot of it was created using
the macro recorder, which generally doesn't produce the cleanest code). On
top of that, you haven't provided any information on your level of VBA
proficiency, so it's difficult to tell how detailed an explanation you
require. Consequently, providing an explanation of what the different parts
do is a big ask - and keep in mind that you're asking volunteers to do this
task.

Perhaps you could narrow it down a bit and try eating this elephant one bite
at a time? Ask more specific questions about the particular parts of the
code that you don't understand or that interest you, and I'm sure someone
will be happy to help.
 
M

macropod

Plus a lot of the code can be explained by selecting an expression and pressing F1...
 
G

Gordon Bentley-Mix

Good point!
--
Cheers!

Gordon Bentley-Mix
Word MVP

macropod said:
Plus a lot of the code can be explained by selecting an expression and
pressing F1...

--
Cheers
macropod
[Microsoft MVP - Word]


Gordon Bentley-Mix said:
That's a pretty big chunk of code to try to explain, and I note that 1)
there are some comments in it already, 2) some of the stuff is pretty
self-explanatory, and 3) a lot of it can be worked out just by looking at
the "native" Word functionality that's being invoked programmatically. In
addition, it's *very* messy code (looks like a lot of it was created
using the macro recorder, which generally doesn't produce the cleanest
code). On top of that, you haven't provided any information on your level
of VBA proficiency, so it's difficult to tell how detailed an explanation
you require. Consequently, providing an explanation of what the different
parts do is a big ask - and keep in mind that you're asking volunteers to
do this task.

Perhaps you could narrow it down a bit and try eating this elephant one
bite at a time? Ask more specific questions about the particular parts of
the code that you don't understand or that interest you, and I'm sure
someone will be happy to help.
--
Cheers!

Gordon Bentley-Mix
Word MVP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top