Excel Chart in VB6

Posted on 2001-06-16
Last Modified: 2008-03-17
I would like to be able to display an Excel chart on a VB6 form. Could someone please point me in the right direct as to how to code the connection. L'd prefer to learn how to code it rather than using a bound control. Thanks in advance,

Question by:Dys060801
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
LVL 33

Expert Comment

ID: 6198447
Try this. To load a excel file, you need to create a DSN named "Excel" that points to your that file. Note that when you click on the Open button from the below program, it will pop up a open dialog. This is a bit redundant since the file to be opened is actually based on the DSN pointer and not the file you choose. You can always remove the common dialog control and the relevant code to get away of the open dialog.


Author Comment

ID: 6198656
Hi hongjun,

Thanks for your response. It gave me a little bit of help in understanding the relationship between Excel and VB. However, it didn't give me help in the specific area I'm interested in. Let me explain.

I am developing a VB application connected to an MS Access database. A SQL query in my application will return a group of numbers to my application in the form of a recordset (which I could convert to an array).

I would like to send those numbers in the recordset to an Excel spreadsheet, have Excel produce a Pie Chart and then have the Pie Chart returned to my application and displayed on a Form in my application.

I am assuming that returning and displaying a Pie Chart (probably an object) is different than returning a spreadsheet depositing the data into an ADO Recordset.

Hope this clarifies the problem I have.


Expert Comment

ID: 6198704
Why not embed an OLE object in your form and make it an excel object.  Then you channel the data into that, run the graph and display the result when its ready?

I've done that with word objects.  There are controls you can add to the form, I think you want OLE/COM object and check the properties.

I'm away from work, otherwise I'd check out exactly what to do...
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 6198897
Thanks for the response Sorklin. Its seems to be getting closer to the solution I need. However, I'd appreciate some direction on the object insertion and coding involved when you are back at work. Haven't played around much with OLE/COM objects. I'm not in a hurry on this one, I can wait...

Dys  :)

Expert Comment

ID: 6202551
I'm working on this, so give me a bit of time...

Author Comment

ID: 6202666
No problem I'll wait.

Accepted Solution

Sorklin earned 50 total points
ID: 6202845
Okay.  I created a form with an OLE object (oleXLChart) and a command button (command1).  When I created the Ole object, I set it to New, Excel Chart (though that really doesnt matter).  Then I pasted the following code into the code sheet for the form:
Option Explicit

Dim xlData As Excel.Application

Private Sub Command1_Click()

    'OleXLChart is an ole object that you've set to be a MS Excel chart.
    'The linking below will supply it with data and the chart.
    'You want to keep track of what your range would be with the data
    'place it after the temporary file you made.
    oleXLChart.SizeMode = 3 'zoom
    oleXLChart.CreateLink "c:\temp\xldata.xls", "A1:B3"
    oleXLChart.Visible = True
End Sub

Private Sub Form_Load()

    Set xlData = New Excel.Application
    With xlData
        .Visible = True
        'This is where you would paste the data you've gathered
        'from whatever sources.
        'Do whatever you need to to format the file correctly.
        .ActiveChart.ChartType = xlPie
        'Save the file in a temporary place so we can create a link.
        'Check first for the existence of the file and if so, delete it.
        If Dir("c:\temp\xldata.xls") <> "" Then
            Kill "c:\temp\xldata.xls"
        End If
        .ActiveWorkbook.SaveAs FileName:="c:\temp\xldata.xls"
    End With 'xlData
End Sub

Private Sub Form_Unload(Cancel As Integer)

    Set xlData = Nothing

         If Dir("c:\temp\xldata.xls") <> "" Then
            Kill "c:\temp\xldata.xls"
        End If

End Sub

This is a big kludge and there is a lot of room for clean up and customizing.  But the idea is that I've created an excel object, written the data to it.  In that excel object, I've created and formatted the chart the way I would like it to be seen.  Then I've temporarily saved the file.  When the user clicks command1 button, the ole form is linked to the file and the graph is displayed.  Works nicely on my system.

There are lots of things I didn't set and lots of things that can be cleaned, tweaked and prodded, but this might get you pointed in the right direction.

Author Comment

ID: 6202869
Thanks very much Sorklin. I'm cellphone communicating right now, but when I get back to my notebook later today I'll give it a try.

Author Comment

ID: 6215541
Thanks Sorklin. It took me a while to get back to this problem, but after applying your solution with a few minor adjustments it worked fine. Many thanks!

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question