Changing the Colour of an Auto Shape (Line)

D

d.i.barr

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
 
K

K Dales

Your code fails right here:
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
 
B

bhofsetz

Change your else if from Or to And

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

to

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

HTH
 
B

bhofsetz

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
 
D

d.i.barr

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
 

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