Ok, I made some changes. The user will need to specify the sheet and the range address or chart name as well as the corrosponding bookmark. It seems to work fine. In the attachment, the bookmarks are not setup well in Word so the chart overlaps the data, but the chart is at the correct bookmark.
' You must set a reference to Microsoft Word Object Library from Tools | References
Option Explicit
Sub ExportToWord()
Dim appWrd As Object
Dim objDoc As Object
Dim FilePath As String
Dim FileName As String
Dim x As Long
Dim LastRow As Long
Dim SheetName As String
Dim BookMarkName As String
Dim Prompt As String
Dim Title As String
Dim ChartName As String
Dim RangeAddress As String
' Turn some stuff off while the macro is running
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
' Assign the Word file path and name to variables
FilePath = ThisWorkbook.Path
FileName = "report1.doc" '"WorkWithExcel.doc"
' Determine the last row of data for our loop
LastRow = Sheets("Summary").Range("A65536").End(xlUp).Row
' Create an instance of Word for us to use
Set appWrd = CreateObject("Word.Application")
' Open our specified Word file, On Error is used in case the file is not there
On Error Resume Next
Set objDoc = appWrd.Documents.Open(FilePath & "\" & FileName)
On Error GoTo 0
' If the file is not found, we need to end the sub and let the user know
If objDoc Is Nothing Then
MsgBox "Unable to find the Word file.", vbCritical, "File Not Found"
appWrd.Quit
Set appWrd = Nothing
Exit Sub
End If
' Copy/Paste Loop starts here (For Charts)
For x = 2 To LastRow
' Use the Status Bar to let the user know what the current progress is
Prompt = "Copying Charts: " & x - 1 & " of " & LastRow - 1 & " (" & _
Format((x - 1) / (LastRow - 1), "Percent") & ")"
Application.StatusBar = Prompt
' Assign the worksheet names and bookmark names to a variable
' Use With to group these lines together
With ThisWorkbook.Sheets("Summary")
SheetName = .Range("A" & x).Text
BookMarkName = .Range("B" & x).Text
ChartName = .Range("C" & x).Text
End With
' Tell Word to goto the bookmark assigned to the variable BookMarkRange
appWrd.Selection.Goto What:=wdGoToBookmark, Name:=BookMarkName
' Copy the Chart from Thisworkbook
ThisWorkbook.Sheets(SheetName).ChartObjects(ChartName).Copy
' Paste into Word
appWrd.Selection.Paste
Next
LastRow = Sheets("Summary").Range("D65536").End(xlUp).Row
' Copy/Paste Loop starts here (For Data)
For x = 2 To LastRow
' Use the Status Bar to let the user know what the current progress is
Prompt = "Copying Data: " & x - 1 & " of " & LastRow - 1 & " (" & Format((x - 1) / (LastRow - 1), "Percent") & ")"
Application.StatusBar = Prompt
' Assign the worksheet names and bookmark names to a variable
' Use With to group these lines together
With ThisWorkbook.Sheets("Summary")
SheetName = .Range("D" & x).Text
BookMarkName = .Range("E" & x).Text
RangeAddress = .Range("F" & x).Text
End With
' Tell Word to goto the bookmark assigned to the variable BookMarkRange
appWrd.Selection.Goto What:=wdGoToBookmark, Name:=BookMarkName
' Copy the Chart from Thisworkbook
ThisWorkbook.Sheets(SheetName).Range(RangeAddress).Copy
' Paste into Word
appWrd.Selection.Paste
Next
' Turn everything back on
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.StatusBar = False
' Let the user know the procedure is now complete
Prompt = "The procedure is now completed." & vbCrLf & vbCrLf & "www.VBAExpress.com"
Title = "Procedure Completion"
MsgBox Prompt, vbOKOnly + vbInformation, Title
' Make our Word session visible
appWrd.Visible = True
' Clean up
Set appWrd = Nothing
Set objDoc = Nothing
End Sub