Mover forms a medida que el usuario se desplaza a la derecha en Excel (VBA)

Tengo un libro de trabajo de Excel con dos forms en Sheet1 como a continuación enter image description here

Mi Requisito es cuando el usuario está navegando hacia el lado derecho de la hoja, es decir, Hacia los encabezados24, el encabezado25, etc., quiero que las dos forms de la hoja se muevan hacia el lado derecho con el usuario.

¿Alguien puede sugerir alguna idea para esto?

Gracias

Prueba esto … sí, es fácil …

Coloque este código en el module de la hoja de trabajo donde existen las forms.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ActiveSheet.Shapes(1) .Left = ActiveWindow.VisibleRange(2, 2).Left .Top = ActiveWindow.VisibleRange(2, 2).Top End With End Sub 

La coorderada (2, 2) es donde desea que se fije la forma mientras se desplaza junto con el keyboard.

Sin embargo, sería molesto trabajar sin la barra de desplazamiento en una enorme hoja de trabajo. así que, alternativamente, creo que puedes usar refresh ontime, coloca este código en un Module

 Private eTime Sub ScreenRefresh() With ThisWorkbook.Worksheets("Sheet1").Shapes(1) .Left = ThisWorkbook.Windows(1).VisibleRange(2, 2).Left .Top = ThisWorkbook.Windows(1).VisibleRange(2, 2).Top End With End Sub Sub StartTimedRefresh() Call ScreenRefresh eTime = Now + TimeValue("00:00:01") Application.OnTime eTime, "StartTimedRefresh" End Sub Sub StopTimer() Application.OnTime eTime, "StartTimedRefresh", , False End Sub 

Y el siguiente código en Sheet1 (donde están las forms)

 Private Sub Worksheet_Activate() Call StartTimedRefresh End Sub Private Sub Worksheet_Deactivate() Call StopTimer End Sub 

Primero crea la forma:

 Sub Creator() Dim shp As Shape Set shp = ActiveSheet.Shapes.AddShape(1, 100, 10, 60, 60) shp.TextFrame.Characters.Text = "I will follow" shp.Name = "MyButton" End Sub 

Luego, en el área del código de la hoja de trabajo:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim sh As Shape, r As Range Set sh = ActiveSheet.Shapes("MyButton") Set r = ActiveCell sh.Top = r.Offset(-1, -2).Top sh.Left = r.Offset(-1, -2).Left End Sub 

Si mueve la celda activa hacia adelante y hacia atrás, la caja se moverá con ella.

Nota:

Este es solo el código de demostración. Aún necesitas hacer lo siguiente:

  • agregue protección para evitar tratar de mover la forma "fuera de la pantalla"
  • establecer las compensaciones adecuadas de ActiveCell en function del tamaño de la forma