前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移动形状妙招,单击鼠标让形状自动跟随来移动形状

移动形状妙招,单击鼠标让形状自动跟随来移动形状

作者头像
fanjy
发布2024-02-23 10:31:48
1130
发布2024-02-23 10:31:48
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA

有时候,我们需要在工作表中绘制形状,并将其移动到合适的位置。通常,我们都是单击该选择形状并按住鼠标左键不放来移动形状。ozgrid.com中有人给出了一个方法,点击选择形状,然后移动鼠标,该形状会随形状而移动,再次点击将形状放置在最终位置。

示例如下。

新建一个工作簿,在其中绘制一些形状,然后插入一个ActiveX标签控件,将其绘制得足够小且设置其不可见。

打开VBE,插入一个标准模块,输入下面的代码:

代码语言:javascript
复制
Public Const GREY_FILL As Long = 14277081
Public Const YELLOW_FILL As Long = 65535
Public selectedShape As Shape
Sub selectShape()
 If Not selectedShape Is Nothing Then
   If Sheet1.Shapes(Application.Caller) Is selectedShape Then
     deselectShape
     Exit Sub
   End If
 End If
 Set selectedShape = Sheet1.Shapes(Application.Caller)
 selectedShape.Fill.ForeColor.RGB = YELLOW_FILL
 selectedShape.ZOrder msoBringToFront
 With Sheet1.Label1
   .BringToFront
   .width = selectedShape.width
   .height = selectedShape.height
   .Top = selectedShape.Top
   .Left = selectedShape.Left
 End With
 DoEvents
End Sub

Sub deselectShape()
 With Sheet1.Label1
   .SendToBack
   .width = 1
   .height = 1
   .Top = 1
   .Left = 1
 End With
 If Not selectedShape Is Nothing Then
   selectedShape.Fill.ForeColor.RGB = GREY_FILL
   Set selectedShape = Nothing
 End If
End Sub

打开形状所在的工作表代码模块,输入下面的代码:

代码语言:javascript
复制
Private Sub Label1_Click()
 deselectShape
 DoEvents
End Sub

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 Dim midX As Double
 Dim midY As Double
 
 Debug.Print X, Y
 'Exit Sub
 If Not selectedShape Is Nothing Then
   X = X + selectedShape.Left
   Y = Y + selectedShape.Top
   With Label1
     midX = .Left + (.width / 2)
     midY = .Top + (.height / 2)
     If X - .Left < midX Then
       .Left = Application.Max(0, X - (.width / 2))
     ElseIf (.Left + .width) - X < midX Then
       .Left = X + (.width / 2)
     End If
     If Y - .Top < midY Then
       .Top = Application.Max(0, Y - (.height / 2))
     ElseIf (.Top + .height) - Y < midY Then
       .Top = Y + (.height / 2)
     End If
     selectedShape.Left = .Left
     selectedShape.Top = .Top
   End With
   DoEvents
 End If
End Sub

此时,只需要将鼠标放置在要移动的形状上单击,然后移动鼠标,形状会随着鼠标移动,移动到想要的位置后再次单击,如下图1所示。

图1

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档