Saltar al contenido

Máximos colaboradores

Popular Content

Showing content with the highest reputation on 07/06/21 in all areas

  1. 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]
    1 point
×
×
  • 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.