ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Changing the Colour of an Auto Shape (Line) (https://www.excelbanter.com/excel-programming/332544-changing-colour-auto-shape-line.html)

d.i.barr[_7_]

Changing the Colour of an Auto Shape (Line)
 

Could anyone help me with this query. I simply want to create a line
that changes colour, which I can do in part. But why when I run the
code, when BLUE or GREEN is entered into Test Sub, it just runs as
RED?


Code:
--------------------
Sub TestShoot()
Call DrawShooting(171#, 115.5, 255.75, 167.25, 2, "BLUE")
End Sub

Sub DrawShooting(StartX As Single, StartY As Single, EndX As Single, EndY As Single, _
Shots As Integer, Optional Color As String)
Dim Shot As Shape
Dim i As Integer
Dim j As Integer

'AddLine(BeginX As Single, BeginY As Single, EndX As Single, EndY As Single) As Shape - Member of Excel.Shapes
If IsMissing(Color) Then
Color = "RED"
ElseIf Color < "GREEN" Or Color < "BLUE" Then
Color = "RED"
End If


Select Case Color
Case "RED"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(255, 0 + j, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
Case "GREEN"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 255, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
Case "BLUE"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 0 + j, 255)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
End Select
End Sub
--------------------


It is obviously something to do with my "
Code:
--------------------
If Color < "GREEN" Or Color < "BLUE" Then
--------------------
" statement, but I'm not sure what. Also, is there a more intuitive way
of selecting the colours than repeating similar code for RED GREEN AND
BLUE. Any help is appreciated.


--
d.i.barr
------------------------------------------------------------------------
d.i.barr's Profile: http://www.excelforum.com/member.php...o&userid=15521
View this thread: http://www.excelforum.com/showthread...hreadid=381268


K Dales[_2_]

Changing the Colour of an Auto Shape (Line)
 
Your code fails right he
ElseIf Color < "GREEN" Or Color < "BLUE" Then
because one of these must always be False , so Not Green or Not Blue
together is, of course, False
Make it And instead of Or and I think it will work

"d.i.barr" wrote:


Could anyone help me with this query. I simply want to create a line
that changes colour, which I can do in part. But why when I run the
code, when BLUE or GREEN is entered into Test Sub, it just runs as
RED?


Code:
--------------------
Sub TestShoot()
Call DrawShooting(171#, 115.5, 255.75, 167.25, 2, "BLUE")
End Sub

Sub DrawShooting(StartX As Single, StartY As Single, EndX As Single, EndY As Single, _
Shots As Integer, Optional Color As String)
Dim Shot As Shape
Dim i As Integer
Dim j As Integer

'AddLine(BeginX As Single, BeginY As Single, EndX As Single, EndY As Single) As Shape - Member of Excel.Shapes
If IsMissing(Color) Then
Color = "RED"
ElseIf Color < "GREEN" Or Color < "BLUE" Then
Color = "RED"
End If


Select Case Color
Case "RED"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(255, 0 + j, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
Case "GREEN"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 255, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
Case "BLUE"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 0 + j, 255)
Application.Wait Now() + 0.0000007
Next
Shot.delete
Next
End Select
End Sub
--------------------


It is obviously something to do with my "
Code:
--------------------
If Color < "GREEN" Or Color < "BLUE" Then
--------------------
" statement, but I'm not sure what. Also, is there a more intuitive way
of selecting the colours than repeating similar code for RED GREEN AND
BLUE. Any help is appreciated.


--
d.i.barr
------------------------------------------------------------------------
d.i.barr's Profile: http://www.excelforum.com/member.php...o&userid=15521
View this thread: http://www.excelforum.com/showthread...hreadid=381268



bhofsetz[_68_]

Changing the Colour of an Auto Shape (Line)
 

Change your else if from Or to And

ElseIf Color < "GREEN" Or Color < "BLUE" Then

to

ElseIf Color < "GREEN" And Color < "BLUE" Then

HTH


--
bhofsetz
------------------------------------------------------------------------
bhofsetz's Profile: http://www.excelforum.com/member.php...o&userid=18807
View this thread: http://www.excelforum.com/showthread...hreadid=381268


bhofsetz[_71_]

Changing the Colour of an Auto Shape (Line)
 

You can actually avoid that IF statement altogether and take bette
advantage of your Select Case statement.

see modified code below:


Code
-------------------
Sub TestShoot()
Call DrawShooting(171#, 115.5, 255.75, 167.25, 20, "BLUE")
End Sub

Sub DrawShooting(StartX As Single, StartY As Single, EndX As Single, EndY As Single, _
Shots As Integer, Optional Color As String)
Dim Shot As Shape
Dim i As Integer
Dim j As Integer

Select Case Color
Case "GREEN"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 255, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.Delete
Next
Case "BLUE"
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(0 + j, 0 + j, 255)
Application.Wait Now() + 0.0000007
Next
Shot.Delete
Next
Case Else
For i = 1 To Shots
Set Shot = ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
For j = 1 To 255
Shot.Line.ForeColor.RGB = RGB(255, 0 + j, 0 + j)
Application.Wait Now() + 0.0000007
Next
Shot.Delete
Next

End Select
End Su
-------------------


HT

--
bhofset
-----------------------------------------------------------------------
bhofsetz's Profile: http://www.excelforum.com/member.php...fo&userid=1880
View this thread: http://www.excelforum.com/showthread.php?threadid=38126


d.i.barr[_9_]

Changing the Colour of an Auto Shape (Line)
 

Thanks bhofsetz and K Dales for the response, that works a treat.
Bhofsetz, the Case statement does make a lot more sense. Have you an
idea how I would make the values of "Color" non-case sensitive? Tha
is, to work with BLUE or Blue or blue or bLue etc without listing the
all seperately in the Case statement? Thanks in advance

--
d.i.bar
-----------------------------------------------------------------------
d.i.barr's Profile: http://www.excelforum.com/member.php...fo&userid=1552
View this thread: http://www.excelforum.com/showthread.php?threadid=38126


d.i.barr[_8_]

Changing the Colour of an Auto Shape (Line)
 

Sorry, I got it ten minutes after posting. Just placing

Code
-------------------
Color = UCase(Color
-------------------

at the start will work

--
d.i.bar
-----------------------------------------------------------------------
d.i.barr's Profile: http://www.excelforum.com/member.php...fo&userid=1552
View this thread: http://www.excelforum.com/showthread.php?threadid=38126



All times are GMT +1. The time now is 06:35 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com