Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 191391
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T16:20:14+00:00 2026-05-11T16:20:14+00:00

I have a Word document with two embedded Excel files (added using Insert ->

  • 0

I have a Word document with two embedded Excel files (added using Insert -> Object -> Create From File) which I wish to modify using Word VBA. I have got to the point where I am able to open the embedded files for editing (see code below), but am unable to get a handle on the Excel workbook using which I can make the modifications and save the embedded file. Does anyone have a solution for this? Thanks in advance.

Sub TestMacro()

    Dim lNumShapes As Long
    Dim lShapeCnt As Long
    Dim xlApp As Object
    Dim wrdActDoc As Document

    Set wrdActDoc = ActiveDocument

    For lShapeCnt = 1 To 1 'wrdActDoc.InlineShapes.Count
        If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
            If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then
                'This opens the embedded Excel workbook using Excel
                wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.Edit
            End If
        End If
    Next lShapeCnt

End Sub
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T16:20:15+00:00Added an answer on May 11, 2026 at 4:20 pm

    Yikes, don’t do what you’re suggesting in your comment. You’ll probably end up with multiple instances of Excel (check Task Manager and see how many there are after executing your code).

    Firstly, add a reference to the Excel object library (Project->References & choose Microsoft Excel Object Library). Now you can declare your objects as bona-fide Excel types and use early binding rather than declaring them as “Object” and using late binding. This isn’t strictly necessary, but apart from anything else it means you get Intellisense when editing your code.

    You’re doing the right thing right up until you do .OleFormat.Edit. (I would personally use .OleFormat.Activate but since I’ve never tried using .Edit I couldn’t say that it makes a difference).

    Having done .Activate (or, presumably, .Edit), you can then access the OleFormat.Object member. Since the embedded Object is an Excel chart, the “Object” will be the Excel Workbook, so you can do this:

    Dim oOleFormat as OleFormat
    Set oOleFormat = ...
    
    oOleFormat.Activate
    
    Dim oWorkbook As Excel.Workbook
    Set oWorkbook = oOleFormat.Object
    
    ' Do stuff with the workbook
    oWorkbook.Charts(1).ChartArea.Font.Bold = True
    

    Note that you do NOT need to close Excel, and indeed you cannot – Word “owns” the instance used for an edit-in-place, and will decide when to close it. This is actually something of a problem, since there’s no obvious way to force the embedded object to be de-activated, so the chart would stay open after you execute the code above.

    There is a hack-y way to get the chart to close, though. If you add tell Word to activate it as something else, it’ll de-activate it first. So, if you tell it to activate it as something non-sensical, you’ll achieve the right result because it’ll de-activate it and then fail to re-activate it. So, add the following line:

    oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
    

    Note that this will raise an error, so you’ll need to temporarily disable error handling using On Error Resume Next. For that reason, I normally create a Deactivate method, to avoid disrupting the error handling in my main method. As in:

    Private Sub DeactivateOleObject(ByRef oOleFormat as OleFormat)
        On Error Resume Next
        oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
    End Sub
    

    Hope this helps.
    Gary

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 91k
  • Answers 91k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer You may run action using AJAX $.get method: <script type="text/javascript">… May 11, 2026 at 6:19 pm
  • Editorial Team
    Editorial Team added an answer In most scenarios you need to only send JSON (or… May 11, 2026 at 6:19 pm
  • Editorial Team
    Editorial Team added an answer You can do this using a macro, and applying it… May 11, 2026 at 6:19 pm

Related Questions

Given a file tree - a directory with directories in it etc, how would
I am having a problem when trying to programmatically print a directory of word
I built a template-based document generator using the Open XML SDK (1.0) , the
I'm thinking about starting work on a fairly large scale .NET or ASP.NET project
I have an HTML page with links that when clicked open to a specific

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.