以用户在Excel中向右滚动的forms移动形状(VBA)

我在下面的Sheet1上有两个形状的Excel工作簿 在这里输入图像描述

我的要求是,当用户正在朝着表格的右侧导航时,即朝向标题24,标题25等等时,我希望表格上的两个形状与用户向右侧移动。

有人可以请build议任何想法。

谢谢

试试这个..是的,它很简单..

将此代码放置在存在形状的工作表模块中。

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 

坐标(2,2)是您希望在您随键盘一起滚动时将形状固定在的位置。

但是,如果在一个巨大的工作表上没有滚动条的话,这会很麻烦。 所以或者我认为你可以使用刷新按时,把这个代码放在一个模块

 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 

而Sheet1中的以下代码(其中的形状在)

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

首先创build形状:

 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 

然后在工作表代码区:

 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 

如果您前后移动活动单元格,框将随之移动。

注意:

这只是演示代码。 你仍然需要:

  • 添加保护,以防止试图移动形状“离屏”
  • 根据形状的大小从ActiveCell设置适当的偏移量