Hola:
¡¡ Lo he conseguido !! Me he superado a mi mismo, os adjunto el aporte mas inútil de la historia del foro.
Se trata de una macro:
Esta macro, crea un formulario con un botón con el nombre cada hoja
.Al ejecutar el formulario, se activa la hoja con el nombre del botón
.Al formulario, se le han añadido las Apis para poder minimizarlo
Y ahora os preguntareis. ¿Pero eso no es exactamente lo mismo que el tab de hojas?.
Pues efectivamente, es lo mismo que el tab de hojas, pero mas grande, mas feo y mas complicado.
Ya se había inventado la rueda, pero yo, la he reinventado, la he hecho cuadrada, para que no haga falta ponerle freno de mano a los coches.
Para probar esta maravilla del progreso humano, solo teneis que abrir cualquier libro, si puede ser con varias hojas, y hacer correr la macro "CrearFormularioMenú", luego ejecutar el formulario generado, y a pulsar botones.
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const GWL_STYLE As Long = (-16)
'-------------------------------------------------
Private Sub UserForm_Initialize()
Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long
'-------------------------------------------------
lngMyHandle = FindWindow("THUNDERDFRAME", "Menú general")
lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)
lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX 'Or WS_MAXIMIZEBOX
SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle
End Sub
'
'¡¡¡ NO AÑADIR/QUITAR/MODIFICAR NADA ANTES DE ESTA LINEA !!!
'
'--------------------------------------------------------------------
' Esta macro, crea un formulario con un botón con el nombre cada hoja
' .Al ejecutar el formulario, se activa la hoja con el nombre del botón
' .Al formulario, se le han añadido las Apis para poder minimizarlo
'--------------------------------------------------------------------
'
Sub CrearFormularioMenú()
Dim Formulario As Object
Dim Boton As MSForms.CommandButton
'----------------------------- AÑADIMOS EL FORMULARIO -----------------
Set Formulario = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
With Formulario
.Properties("ShowModal") = False
.Properties("Caption") = "Menú general"
.Properties("Width") = 158
.Properties("Height") = Sheets.Count * 50 + 28
End With
'------------------------------ AÑADIMOS LAS APIS ----------------
Set Desde = ActiveWorkbook.VBProject.VBComponents("Módulo1").CodeModule
With ActiveWorkbook.VBProject.VBComponents(Formulario.Name).CodeModule
.InsertLines .CountOfLines + 1, Desde.Lines(1, 19)
End With
'--------------------------------------------------------------------------
X = ActiveWorkbook.VBProject.VBComponents(Formulario.Name).CodeModule.CountOfLines + 1
For m = 1 To Sheets.Count
Set Boton = Formulario.Designer.Controls.Add("forms.CommandButton.1")
With Formulario
'-------------- AÑADIMOS UN COMMANDBUTTON POR CADA HOJA ---------------
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Name = "Boton" & m
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Caption = Sheets(m).Name
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Width = 150
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Height = 50
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Top = 2 + 50 * (m - 1)
.Designer.Controls(Formulario.Designer.Controls.Count - 1).Left = 2
'--------------- AÑADIMOS EL EVENTO CLICK PARA CADA COMMANDBUTTON ----
.CodeModule.InsertLines X, "Private Sub Boton" & m & "_Click()": X = X + 1
.CodeModule.InsertLines X, "Sheets(""" & Sheets(m).Name & """).Activate": X = X + 1
.CodeModule.InsertLines X, "End Sub ": X = X + 1
'----------------------------------------------------------------------------------
End With
Next m
End Sub
[/CODE]
Que el Señor os de paciencia para aguantarme en mi demencia.
Os tengo presentes en mis oraciones. Antoni.
[b][i][size=5][color=red]¡ Importante ! Ver posts Nº 10 y Nº 12[/color][/size][/i][/b]