Results 1 to 16 of 16

Thread: Pushing Charts and Ranges from Excel to Word

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #10
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    Ok, I added a bit to make you all happy.

     
    ' 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 SheetChart As String
        Dim SheetRange As String
        Dim BookMarkChart As String
        Dim BookMarkRange As String
        Dim Prompt As String
        Dim Title 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 = "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 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")
                SheetChart = .Range("A" & x).Text
                SheetRange = .Range("B" & x).Text
                BookMarkChart = .Range("C" & x).Text
                BookMarkRange = .Range("D" & x).Text
            End With
            ' Tell Word to goto the bookmark assigned to the variable BookMarkRange
            appWrd.Selection.Goto What:=wdGoToBookmark, Name:=BookMarkRange
            ' Copy the data from Thisworkbook
            ThisWorkbook.Sheets(SheetRange).UsedRange.Copy
            ' Paste into Word
            appWrd.Selection.Paste
            ' Tell Word to goto the bookmark assigned to the variable BookMarkChart
            appWrd.Selection.Goto What:=wdGoToBookmark, Name:=BookMarkChart
            ' Copy the data from Thisworkbook
            ThisWorkbook.Sheets(SheetChart).ChartObjects(1).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

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •