shapes vba

rakesh seebaruth

Active Member
Joined
Oct 6, 2011
Messages
303
Hi Guys


I have the following vba codes


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Box As Shape
Set Box = Me.Shapes("Rectangle 1")
If Selection.Left + Selection.Width _
+ Box.Width > Rows(1).Width Then
Box.Left = Selection.Left - Box.Width
Else: Box.Left = Selection.Left + Selection.Width
End If
If Selection.Top + Selection.Height _
+ Box.Height > Columns(1).Height Then
Box.Top = Selection.Top - Box.Height
Else: Box.Top = Selection.Top + Selection.Height
End If
Box.ZOrder msoBringToFront
End Sub

It works fully well with the rectangle


I have changed the rectangle to rounded rectangle


It’s not working


Your help will be highly appreciated.


Happy New Year 2019


Thanks/regards

rakesh
 

Excel Facts

Whats the difference between CONCAT and CONCATENATE?
The newer CONCAT function can reference a range of cells. =CONCATENATE(A1,A2,A3,A4,A5) becomes =CONCAT(A1:A5)
What is the new shape's name?
- select shape and look in Excel's name box

Either
- rename the shape as "Rectangle 1"
or
- amend the code to refer to the correct name
 
Upvote 0
Thanks it works

Now how to add two shapes one Rectangle 1 and Rounded Rectangle 1 the above vba codes?

Happy new year 2019

regards

rakesh
 
Upvote 0
In principle, simply repeat the code for each shape (see below)

But :confused::confused:
Your code is triggered EVERY time a new cell is selected - is that what you really want?
Should changes to "Rectangle 1" and "Rectangle: Rounded Corners 1" BOTH be triggered by selecting the same cell(s)?
- if not please explain what should happen

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Box As Shape
    Set Box = Me.Shapes("Rectangle 1")
        If Selection.Left + Selection.Width + Box.Width > Rows(1).Width Then
            Box.Left = Selection.Left - Box.Width
        Else: Box.Left = Selection.Left + Selection.Width
        End If

        If Selection.Top + Selection.Height + Box.Height > Columns(1).Height Then
            Box.Top = Selection.Top - Box.Height
        Else: Box.Top = Selection.Top + Selection.Height
        End If
    Box.ZOrder msoBringToFront
'Now Repeat for 2nd shape - amend properties as required
    Set Box = Me.Shapes("Rectangle: Rounded Corners 1")
        If Selection.Left + Selection.Width + Box.Width > Rows(1).Width Then
            Box.Left = Selection.Left - Box.Width
        Else: Box.Left = Selection.Left + Selection.Width
        End If

        If Selection.Top + Selection.Height + Box.Height > Columns(1).Height Then
            Box.Top = Selection.Top - Box.Height
        Else: Box.Top = Selection.Top + Selection.Height
        End If
    Box.ZOrder msoBringToFront
     
End Sub
 
Last edited:
Upvote 0
thanks but there is only one shape the rectangle 1 covers the other shape completely. The position of the second shape is not correct.
 
Upvote 0
Do you want second shape to always be the same size and in same position as first shape?
 
Last edited:
Upvote 0
Is this what you want?
- amend shape names if necessary

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Box As Shape, Box2 As Shape
    Set Box = Me.Shapes("[COLOR=#ff0000]Rectangle 1[/COLOR]")
    Set Box2 = Me.Shapes("[COLOR=#ff0000]Rectangle: Rounded Corners 2[/COLOR]")
[I][COLOR=#006400]'first box    [/COLOR][/I]
    With Selection
        If .Left + .Width + Box.Width > Rows(1).Width Then
            Box.Left = .Left - Box.Width
        Else: Box.Left = .Left + .Width
        End If
        If .Top + .Height + Box.Height > Columns(1).Height Then
            Box.Top = .Top - Box.Height
        Else: Box.Top = .Top + .Height
        End If
    End With
    Box.ZOrder msoBringToFront
[I][COLOR=#006400]'other box[/COLOR][/I]
    With Box
        Box2.Left = .Left + .Width
        Box2.Top = .Top
        Box2.Width = .Width
        Box2.Height = .Height
    End With
End Sub
 
Upvote 0
leave a little space in between the shapes?

Amend this line
Code:
        Box2.Left = .Left + .Width

Try
Code:
        Box2.Left = .Left + .Width + 10
 
Upvote 0

Forum statistics

Threads
1,223,886
Messages
6,175,196
Members
452,616
Latest member
intern444

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top