+ Reply to Thread
Results 1 to 6 of 6

Changing the Colour of an Auto Shape (Line)

Hybrid View

  1. #1
    Registered User
    Join Date
    10-20-2004
    Posts
    5

    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?

    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 "
    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.

  2. #2
    Forum Contributor
    Join Date
    01-21-2005
    Location
    Colorado
    MS-Off Ver
    2000,2003,2007
    Posts
    481
    Change your else if from Or to And

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

    to

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

    HTH

  3. #3
    K Dales
    Guest

    RE: Changing the Colour of an Auto Shape (Line)

    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

    "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
    >
    >


  4. #4
    Forum Contributor
    Join Date
    01-21-2005
    Location
    Colorado
    MS-Off Ver
    2000,2003,2007
    Posts
    481
    You can actually avoid that IF statement altogether and take better advantage of your Select Case statement.

    see modified code below:

    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 Sub
    HTH

  5. #5
    Registered User
    Join Date
    10-20-2004
    Posts
    5
    Thanks bhofsetz and K Dales for the response, that works a treat. Bhofsetz, the Case statement does make a lot more sense. Have you any idea how I would make the values of "Color" non-case sensitive? That is, to work with BLUE or Blue or blue or bLue etc without listing them all seperately in the Case statement? Thanks in advance.

  6. #6
    Registered User
    Join Date
    10-20-2004
    Posts
    5
    Sorry, I got it ten minutes after posting. Just placing
    Color = UCase(Color)
    at the start will work.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1