Select shapes with same name but different number using VBA

leojez

Board Regular
Joined
Apr 12, 2022
Messages
51
Office Version
  1. 365
Platform
  1. Windows
Hello,

I have a button linked to a macro to toggle hide / show around 15 grouped shapes. I can achieve the effect I want by grouping all the shapes together as one group and then using that group name in the code, however, some shapes are set to move and others not move with cells, so it would be better to have all the groups independent of each other.

I tried to get the toggle effect using the group names (each group is named "Instruction1", "Instruction2", "Instruction3:, etc.) by using the wildcard aasterisk "*" as follows:

VBA Code:
Sub Toggle_Help_Shapes_Portfolio()
    ActiveSheet.Shapes("Instruction*").Visible = Not ActiveSheet.Shapes("Instruction*").Visible
End Sub

to hopefully select any group beginning with "Instruction" and then any number after it, but this doesn't work. Any ideas how to achieve this, please?

Thank you!
 

Excel Facts

Remove leading & trailing spaces
Save as CSV to remove all leading and trailing spaces. It is faster than using TRIM().
Try this:
Change 3 to your needs:
VBA Code:
Sub Toggle_Shapes()
'Modified 5/1/2022  10:13:36 AM  EDT
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To 3
        ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Works great thanks so much! I wonder if there is a way to make the number any number? For example, on sheet 1 I have shape groups "Instruction1" to ""Instruction14" but on sheet 2 I have only "Instruction1" to "Instruction7". I've got 8 sheets I am applying this macro to, all with a different number of shape groups, so I could make 8 different macros, one for each sheet, but would be nice, if possible, to apply the same macro to each sheet.
 
Upvote 0
Assuming all the sheets only have shapes named "Instruction & a number.
Try this:
VBA Code:
Sub Toggle_Shapes()
'Modified 5/1/2022  10:42:36 AM  EDT
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Assuming all the sheets only have shapes named "Instruction & a number.
Try this:
VBA Code:
Sub Toggle_Shapes()
'Modified 5/1/2022  10:42:36 AM  EDT
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
Thanks! Unfortunately, it returns an error:

"Run-time error. The item with the specified name wasn't found"

Debugging highlights the line:

ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible

Here is my code:

VBA Code:
Sub Toggle_Help_Shapes()
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Does this work...
VBA Code:
Sub ToggleInstructionShapes()
  Dim Shp As Variant
  For Each Shp In ActiveSheet.Shapes
    If Shp.Name Like "Instruction*" Then
      Shp.Visible = Not Shp.Visible
    End If
  Next
End Sub
 
Upvote 0
Solution
You may have a shape on the sheet that is not named "Instruction"
Try this:
VBA Code:
Sub Toggle_Shapes()
'Modified  5/1/2022  11:04:15 AM  EDT
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        If InStr(ActiveSheet.Shapes(i).Name, "Instruction") Then ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
You may have a shape on the sheet that is not named "Instruction"
Try this:
VBA Code:
Sub Toggle_Shapes()
'Modified  5/1/2022  11:04:15 AM  EDT
Application.ScreenUpdating = False
Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        If InStr(ActiveSheet.Shapes(i).Name, "Instruction") Then ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible
    Next
Application.ScreenUpdating = True
End Sub
Thanks again! Unfortunately, it still returns an error. You are right, I do have other shapes with different names. I named the ones I want to be toggled on and off "Instruction".

The error is: "The item with the specified name wasn't found". Debugging highlights the following:

ActiveSheet.Shapes("Instruction" & i).Visible = Not ActiveSheet.Shapes("Instruction" & i).Visible

Any more ideas appreciated! Thanks.
 
Upvote 0
Does this work...
VBA Code:
Sub ToggleInstructionShapes()
  Dim Shp As Variant
  For Each Shp In ActiveSheet.Shapes
    If Shp.Name Like "Instruction*" Then
      Shp.Visible = Not Shp.Visible
    End If
  Next
End Sub
Unfortunately, not :(
 
Upvote 0
How did you group the shapes in, say, Instruction1? Describe the procedure you used.
 
Upvote 0

Forum statistics

Threads
1,223,228
Messages
6,170,871
Members
452,363
Latest member
merico17

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