VBA高级应用30例应用2:MouseMove鼠标左键按下并移动鼠标事件

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴"实战",并做"战术总结",以便大家能很好的应用。教程的目的是要求大家在实际工作中分发VBA程序,写好的程序可以升级 。本套教程共三册三十个专题,本讲的内容是:VBA高级应用30例应用2:MouseMove鼠标左键按下并移动鼠标事件

分享成果,随喜正能量】 海洋能接纳百川,所以深不可测,广阔无边;大地能承载万物,所以生机勃勃,气象万千;天空能包容一切,所以宽广浩瀚、虚融自在;一颗宁静而平等的心,亦能包容万物、能感化世界上最顽固的敌人、能化解世间最强烈的仇恨、能治疗人类身心的疑难杂症。可以这么说,只要我们的心能够平静与自在,天下没有难事。心的自性是活泼的、灵活的、生动的、机灵的,心灵的力量超越世间所有力量。有心量就有福报,有福报就能心安,心安才能快乐。。

应用2 在列表框内及列表框间实现数据拖放

利用VBA编程时候,我们往往会利用列表框进行选择处理,最为方便的操作是拖放数据,但是在VBA中实现拖放,是比较困难的任务。为了便于在UserForm上的两个列表框之间完成拖放操作,我专门利用这个专题给大家讲解一个利用类模块的方案,在需要的时候,只需将其插入到VBA项目中即可。这样做之后,可以大大方便我们自己的工作。

1 实现的工作原理

如果要在UserForm上的控件之间(或控件内)实现拖放,则需要以下控件事件:

1) MouseMove鼠标左键按下并移动鼠标事件

当鼠标左键按下并移动鼠标时,用户可能正在开始拖动操作。我们需要确保记住列表中当前选定的项目。我希望代码能够在两个控件之间和一个控件内进行拖放,并指示拖放将在何处进行。因此,我需要两件事:

一是记住在开始拖动时选择了哪些列表的项,代码通过在每个选定项前面添加一个字符串位来临时标记我们正在拖动的项:">"。此字符串也在稍后利用为在移动后必须从列表中删除哪些项的标识。如果用户没有按下鼠标按钮的情况下拖动,则将从列表项中删除">"以进行清理。

二是指示下落位置的方法,VBA不便于检测鼠标光标下的列表项。MouseMove和BeforeDropOrPaste事件确实给出了X和Y坐标,但是确定哪个项目"属于"某个Y并不容易,因为我们不知道每个项目的Y坐标。我使用的技巧是:临时将40个列表项添加到列表框中(以确保列表项使用了框的整个高度),然后将列表框的topindex设置为最后一个。这将强制列表框向下滚动,在列表框底部显示最后一项。然后列表框会得到一个新的TopIndex(实际显示在顶部的项目),这样我们现在就可以计算有多少项目适合列表框的高度。因此,我们可以计算单个项目的高度,并使用它来检测鼠标的位置。我们将在属于ListBox1的属性过程中找到执行此操作的代码。

  • 我们先来讲解一下这个事件,MouseMove 事件在用户移动鼠标时发生:

语法:Private Subobject _MouseMove( ByVal Button As fmButton,ByVal Shift As fmShiftState,ByVal X As Single,ByVal Y As Single)

参数:

Part

说明

备注

object

必填。

有效的对象名称。

Button

必填。

标识鼠标按钮状态的整数值。

Shift

必填。

指定 Shift、Ctrl 和 Alt 的状态。

X, Y

必填。

从控件的左或上边缘以磅为单位测量的水平或垂直位置。

Button 的设置是:

说明

0

未按下任何按钮。

1

已按下左键。

2

已按下右键。

3

已按下右键和左键。

4

已按下中键。

5

已按下中键和左键。

6

已按下中键和右键。

7

已按下全部三个键。

Shift 的设置是:

说明

1

已按下 Shift。

2

已按下 Ctrl。

3

已按下 Shift 和 Ctrl。

4

已按下 Alt。

5

已按下 Alt 和 Shift。

6

已按下 Alt 和 Ctrl。

7

已按下 Alt、Shift 和 Ctrl。

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
西猫雷婶9 分钟前
python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算
开发语言·python·opencv
C++小厨神13 分钟前
C#语言的函数实现
开发语言·后端·golang
qwe35263315 分钟前
自定义数据集使用scikit-learn中的包实现线性回归方法对其进行拟合
开发语言·python
S-X-S23 分钟前
OpenAI模块重构
开发语言·重构·openai
计算机-秋大田37 分钟前
基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
java·开发语言·后端·微信·小程序·课程设计
llp111042 分钟前
基于java线程池和EasyExcel实现数据异步导入
java·开发语言
四念处茫茫1 小时前
【C语言系列】深入理解指针(3)
c语言·开发语言·visual studio
漫漫进阶路6 小时前
VS C++ 配置OPENCV环境
开发语言·c++·opencv
BinaryBardC7 小时前
Swift语言的网络编程
开发语言·后端·golang
code_shenbing8 小时前
基于 WPF 平台使用纯 C# 制作流体动画
开发语言·c#·wpf