Chart and Curve in VBA API

Posted on 2011-09-13
Medium Priority
Last Modified: 2012-06-21
Dear Expert,
I got one question on VBA,  I am learning how to plot curve in vba and
find some example  in goole seach and find following example and VBA code
But I am not familar with VBA userform1 usage , just want to know how to
let the form_paint() run to draw a curve. I try to run it in form_paint() but
it report "Me" word  is not using correctly.

So the question is
What is "Me" means in the code, how to use it ?
Where the curve should be displayed, is it on userform window or Excel window ? how to make
it happen,  Any good example for beginner ? Do I need to create userform1 first so then
call form_point() function, but how ? any simple code me to start ?

Pleae advise

Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Declare Function PolyBezier Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Private Declare Function PolyBezierTo Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function PolyPolygon Lib "gdi32.dll" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long

Private Sub Form_Paint()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim pts(0 To 6) As POINTAPI
    Dim numpoints(0 To 1) As Long
    'set the co¿¿dinates
    pts(0).x = 0: pts(0).y = 100
    pts(1).x = 125: pts(1).y = 75
    pts(2).x = 255: pts(2).y = 148
    pts(3).x = 219: pts(3).y = 199
    pts(4).x = 315: pts(4).y = 203
    pts(5).x = 236: pts(5).y = 16
    pts(6).x = 122: pts(6).y = 123
    'set the forecolor to green
    Me.ForeColor = vbGreen
    'draw the b¿¿ier
    PolyBezier Me.hdc, pts(0), 7
    'set the forecolor to red
    Me.ForeColor = vbRed
    'move the 'active' point
    MoveToEx Me.hdc, 200, 25, ByVal 0&
    'set the co¿¿dinates
    pts(0).x = 125: pts(0).y = 50
    pts(1).x = 123: pts(1).y = 200
    pts(2).x = 102: pts(2).y = 100
    pts(3).x = 102: pts(3).y = 100
    pts(4).x = 312: pts(4).y = 75
    pts(5).x = 289: pts(5).y = 125
    'draw the b¿¿ier
    PolyBezierTo Me.hdc, pts(0), 6
    'set the forecolor to blue
    Me.ForeColor = vbBlue
    'set the points belonging to the rectangle
    pts(0).x = 20: pts(0).y = 10
    pts(1).x = 200: pts(1).y = 10
    pts(2).x = 200: pts(2).y = 190
    pts(3).x = 20: pts(3).y = 190
    numpoints(0) = 4
    'set the points belonging to the triangle
    pts(4).x = 100: pts(4).y = 0
    pts(5).x = 50: pts(5).y = 100
    pts(6).x = 150: pts(6).y = 100
    numpoints(1) = 3
    'draw the polygons
    PolyPolygon Me.hdc, pts(0), numpoints(0), 2
End Sub

Open in new window

Question by:duncanb7
  • 2
  • 2
LVL 17

Expert Comment

ID: 36528154
I think the code you have downloaded was probably created for VB6, and you'll find it difficult to get it working in Excel VBA.  This code is intended to draw the shapes on a userform, which is not easy in VBA. Are you trying to draw shapes onto an Excel worksheet?  If so there are various methods of the Shapes collection that you can look up online, for example AddPolyLine, AddCurve which allow you to do this without using Windows apis.
LVL 13

Author Comment

ID: 36528172
ANd now I create an userform1 and add one command button to call Form_Paint() and
I replace the name of Form_paint() by Commandbutton1_Click(), now it won't report "Me"
error, porbably, ME is refer to userform1. But now report error on Me.hdc  in which hdc is
not member. What is hdc, How can I find correct Me.hdc ?


LVL 17

Accepted Solution

andrewssd3 earned 1500 total points
ID: 36528217
That's why I suggested you do it another way.  It's complicated and not easy to maintain and won't be guaranteed to work in future Office versions.  But if you want to go down that route, take a look at this:  http://www.cpearson.com/excel/formcontrol.aspx
LVL 13

Author Closing Comment

ID: 36528412
If I set hdc instead me.hdc and put
hdc=Getforegroundwindow(), and it works better

Thanks for your reply


Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Microsoft's Excel has many features that most people will never need nor take advantage of.  Conditional formatting is one feature that you may find a necessity once you start using it.
Windows Explorer lets you open cabinet (cab) files like any other folder. In VBA you can easily handle normal files and folders, but opening and indeed creating cabinet files takes a lot more - and that's you'll find here.
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

624 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