Saltar al contenido

Añadir acciones a shape form de acuerdo a los nombres


Recommended Posts

publicado

Hola a todos! tengo una consulta que pareciera ser imposible... vengo investigando hace mas de un mes y no encuentro la forma de resolverlo....

Tengo una rutina que me crea una serie de shapes  rectangulares como si fueran boton de un indice... la rutina recorre cada hoja, y crea en la hoja1 un shape por cada hoja que encuentre en el libro, ... logre que le ponga el nombre de cada hoja como texto al shape... pero lo que necesito agregar el action para cada shape, ,

 

ejemplo: si existe una hoja "X" creo el shape con texto "X"  en la hoja 1. y el action debe ser : ir a la hoja X , si esta oculta, mostrarla.

 

 For Each Worksheet In ThisWorkbook.Worksheets
        
        Worksheet.Activate
        
        'Dim shp As Shape
        Set ws = ThisWorkbook.Sheets("Sheet1")
        
        If Worksheet.Name <> "Sheet1" Then
            
            ws.Activate
            
            clTop = clTop + 40
            
            Set shp = ws.Shapes.AddShape(msoShapeRoundedRectangle, clLeft, clTop, clWidth, clHeight)
            shp.Line.Visible = msoFalse
            shp.Name = Worksheet.Name
            With shp.Fill
                .Visible = msoTrue
                .ForeColor.RGB = RGB(255, 255, 255)
                .Transparency = 0
                .Solid
            End With
            
            shp.Shadow.Type = msoShadow21
                       
            
            With shp.TextFrame2.TextRange
              .Text = Worksheet.Name
              .Font.Bold = msoTrue
              .Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
              .Font.Size = 11
              .Font.Bold = False
              .Font.Name = "Calibri"
              
            End With
            
            
            
            shp.TextFrame.HorizontalAlignment = xlHAlignCenter
            shp.TextFrame.VerticalAlignment = xlVAlignCenter
            
            xname = "go" & Worksheet.Name
            
            ASD = "'" & Worksheet.Name & "!'A1"
            Action = xname
            shp.OnAction = Action
            
                SubAddress:="'" & wsName & "'!A1"
            
            
        End If
    
    Next Worksheet

 

ese utimo paso no lo he logrado de ninguna forma, y termine cayendo una tarea manual y nada automatizada de que el action; concatene el "go" + nombre de la hoja, despues creo una a una las rutinas para ir a la hoja necesaria...

Private Sub goX()

xname = ActiveSheet.Name
If Sheets(xname).Visible = False Then
Sheets(xname).Visible = True
Sheets(xname).Activate
End If

End SuB

 

y por ultimo lo que NO he logrado hacer es , que en el mismo Shape "Normal View", que ejecutar:

Application.ExecuteExcel4Macro "show.toolbar(""Ribbon"",True)"

Application.ExecuteExcel4Macro "show.toolbar(""Ribbon"",false)"

 

Existe alguna forma de que lo pueda automatizar al 100% y evitarme la creacion manual de cada rutina  para ir a la hoja determinada? Adjunto hoja de ejemplo

Agradezco desde ya su colaboracion.... en lo que pareciera mision imposible
 

 

 

indice.zip

publicado

Asigna la misma macro a todos los shapes .OnAction = "GoHoja"  y añade esta macro:

Sub GoHoja()
With Sheets(Application.Caller)
   .Visible = xlSheetVisible
   .Activate
End With
End Sub

 

publicado

Hola Antoni! ha funcionado a la perfeccion, desconocimiento total por el application.caller que me hubiera facilitado tanto conocerlo antes...

muchisimas gracias!!!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.