How do I get Excel to tell me the angle of a line

D

drbob2000

I am trying to determine the angle of a line drawn in Excel; I need to acess
angles from digital photos...so I import the photo and draw a line on it....I
need to know the angle of the line.
 
H

Harlan Grove

drbob2000 wrote...
I am trying to determine the angle of a line drawn in Excel; I need to acess
angles from digital photos...so I import the photo and draw a line on it....I
need to know the angle of the line.

A single line on it's own has no angles, or at any point has two rays
that form a 180 degree angle. Do you mean relative to the horizontal?
If so, drawn lines have Height and Width properties relative to their
'top-left' endpoint. Pass them as arguments to the worksheet function
ATAN2 to get the angle in radians.

As an example, run this macro after selecting a drawn line.

Sub rfh()
Dim s As Shape

If TypeOf Selection Is Line Then
Set s = ActiveSheet.Shapes(Selection.Index)
Else
Exit Sub
End If

With Application.WorksheetFunction
MsgBox _
prompt:=.Atan2(s.Width, IIf(s.VerticalFlip, 1, -1) *
s.Height), _
Title:="Angle selected line forms to the horizontal (in
radians)"
End With
End Sub
 
D

drbob2000

I could not get the macro to run (I don't have much experience with
this)...there was a syntax error....How do I get the properties of the
line....and yes I am measuring the angle from the horrizontal.
 
H

Harlan Grove

drbob2000 wrote...
I could not get the macro to run (I don't have much experience with
this)...there was a syntax error....How do I get the properties of the
line....and yes I am measuring the angle from the horrizontal.
....

The problem may be line wrapping. First, use a general code module in
VBA. Press [Alt]+[F11] to switch to the VB Editor, then run the menu
command Insert > Module. That'll bring up a new, blank general code
module. Then paste the following code into it.

Sub rfh()
Dim s As Shape

If TypeOf Selection Is Line Then
Set s = ActiveSheet.Shapes(Selection.Index)
Else
MsgBox Prompt:="No drawn line selected", Title:="ERROR"
Exit Sub
End If

With Application.WorksheetFunction
MsgBox _
Prompt:=.Atan2( _
s.Width, _
IIf(s.VerticalFlip, 1, -1) * s.Height), _
Title:="Angle of selected line to horizontal (radians)"
End With
End Sub

Also, you must select a drawn line before running this macro.
Otherwise, it'll display an error dialog then exit.
 
D

drbob2000

Thanks!!
That worked...now I just need to figure out how to draw a line and have the
degrees marked next to it in a field. (if you know how to do that it would
be wonderfull for you to share :) however, I do plan to attempt learning
much more about VB.

Thanks again.

Harlan Grove said:
drbob2000 wrote...
I could not get the macro to run (I don't have much experience with
this)...there was a syntax error....How do I get the properties of the
line....and yes I am measuring the angle from the horrizontal.
....

The problem may be line wrapping. First, use a general code module in
VBA. Press [Alt]+[F11] to switch to the VB Editor, then run the menu
command Insert > Module. That'll bring up a new, blank general code
module. Then paste the following code into it.

Sub rfh()
Dim s As Shape

If TypeOf Selection Is Line Then
Set s = ActiveSheet.Shapes(Selection.Index)
Else
MsgBox Prompt:="No drawn line selected", Title:="ERROR"
Exit Sub
End If

With Application.WorksheetFunction
MsgBox _
Prompt:=.Atan2( _
s.Width, _
IIf(s.VerticalFlip, 1, -1) * s.Height), _
Title:="Angle of selected line to horizontal (radians)"
End With
End Sub

Also, you must select a drawn line before running this macro.
Otherwise, it'll display an error dialog then exit.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top