Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como Crear Una Autoforma que se Desplace a Medida que se Hace Scroll


.

En este ejemplo se muestra como simular una autoforma flotante que se desplaza por la hoja de Excel con scroll, es decir que a medida que se mueva con scroll o barra de desplazamiento hacia abajo o la derecha la autoforma siempre estará visible en la hoja de Excel, a dicha autoforma se le puede asignar una macro que ejecute un procedimiento y siempre estará visible para poder hacer click en la autoforma y por ende ejecutar la macro.

Otros ejemplos con formularios de Excel puedes verlos en el playlist de nuestro canal que trata sobre el tema haz click en el siguiente link Formularios de Excel.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

 

Desde el link del final se puede descargar el ejemplo. Abierto el libro de Excel se pude observar una autoforma, en realidad es un formulario que simula una autoforma, al desplazarse haciendo scroll por la hoja del Libro de Excel, ya sea mediante scroll con el mouse o moviendo las barras de desplazamiento en cualquier dirección, la autoforma es un verdadero botón flotante que se autodesplaza por todo el libro de Excel estando siempre visible.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Quizá sea de utilidad también

Como abrir formularios de Excel desde un Listbox

Como Eliminar el Boton X o Cerrar de un Formulario de Excel

Como Crear un Menú Flotante que se Desplace por la Hoja Excel con Scroll o Barras Desplazamiento

En realidad la autoforma es una imagen que emula una flecha clásica de una autoforma, la cual está montada sobre un formulario de Excel al cual se le ha quitado la barra de titulos donde normalmente está la X de cerrar el formulario.

Para lograr esto se pone en un modulo el siguiente código:

mhWndForm = FindWindow(«ThunderDFrame», MeCaption)

lSty = GetWindowLong(mhWndForm, -16)

lSty = lSty And Not &HC00000

SetWindowLong mhWndForm, -16, lSty

DrawMenuBar mhWndForm

Es preciso recordar que el formulario se debe poner en modo no modal, para ello se puede hacer mediante código o directamente en las propiedades, mediante código se debe escribir el siguiente código en el evento inicializar del formulario:

UserFrom1.Show vbModal

En el caso que se quiera directamente establecerlos en las propiedades se debe cambiar las propiedades del formulario ShowModal a False.

ShowModal=False debe establecer en las propiedades del formulario.

El Ejemplo de Macro llamado Como Crear Boton Flotante o Una Autoforma que se Desplace a Medida que se Hace Scroll se puede descargar desde el final del post, a continuación el código contenido en el ejemplo.

Código que se inserta en un Formulario de Excel

‘*************** https://macrosenexcel.com   ******** https://www.youtube.com/c/programarexcel?sub_confirmation=1 ******
Dim FormX, FormY

Private Sub CommandButton2_Click()
MsgBox («Visita http://programarexcel.com»), vbInformation, «AVISO»
End Sub

Private Sub UserForm_Click()
MsgBox («Visita https://macrosenexcel.com»), vbInformation, «AVISO»
End Sub

Private Sub UserForm_Initialize()
Dim sql As String, I As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
EliminarTitulo Me.Caption
With UserForm4
.Height = 42
.Top = 300
.Left = 80
.Width = 60
End With
End Sub
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
If Button = 1 Then FormX = x ‘: FormY = Y
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
If Button = 1 Then Me.Left = Me.Left + (x – FormX) ‘: Me.Top = Me.Top + (Y – FormY)
End Sub

Código que se inserta en un módulo

#If VBA7 And Win64 Then

‘Si es de 64 bits

Public Declare PtrSafe Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr

Public Declare PtrSafe Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Public Declare PtrSafe Function GetWindowLongPtr Lib «USER32» Alias «GetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr

Public Declare PtrSafe Function SetWindowLongPtr Lib «USER32» Alias «SetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

Public Declare PtrSafe Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As LongPtr

Public Declare PtrSafe Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr

#Else

‘Si es de 32 bits

Public Declare Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Declare Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetWindowLong Lib «USER32» Alias «GetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib «USER32» Alias «SetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As Long

Public Declare Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

#End If

‘*************** https://macrosenexcel.com   ******** https://www.youtube.com/c/programarexcel?sub_confirmation=1 ******

Sub EliminarTitulo(MeCaption)

Dim lSty As Long

Dim hMenu As Long

Dim mhWndForm As Long

mhWndForm = FindWindow(«ThunderDFrame», MeCaption)

lSty = GetWindowLong(mhWndForm, -16)

lSty = lSty And Not &HC00000

SetWindowLong mhWndForm, -16, lSty

DrawMenuBar mhWndForm

End Sub


Sub Muestra()

UserForm4.Show

End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends