cherrycdh 发表于 2021-8-6 15:39

关于vba中的me问题与变量问题

本帖最后由 cherrycdh 于 2021-8-6 15:41 编辑

在全民一起vba提高篇二十六回里面,有这样的一个状态,点击切换图片的时候它会自动切换目录下面的照片,







因为视频老师在讲解过程中一笔带过了,所以有点疑问想要咨询,vba的代码如下
Dim x As Integer      '设置变量为整数类型

Private Sub CommandButton1_Click()
x = (x + 1) Mod 5      '设置变体随机,因为有5张图,因此设置模运算,然后我们总共有5张图,因此设置的是5的除数,如果x=1,那就是余1
k = "E:\Excel VBA入门及应用\vba提高篇\27、第二十六回的图片\" & Trim(Str(x + 1)) & ".jpg"'这里的X+1是因为,我们的图片是1-5的,如果正好是5的余数那就是0了,跟图片实际不符合,但是如果写模运算是6的话又多了一个0,因此x+1是最合适的
Me.Image1.Picture = LoadPicture(k)
Me.Repaint
End Sub

疑问1:为什么x as integer是加在命令上面的,我尝试过加在命令中,但是最后会发现点击切换按钮的时候不会切换图片

疑问2:me的意思,我网上查了,me写的是:
Me 关键字像是隐含声明的变量。这个关键字适用于类模块中的每个过程。当类有多个实例时,Me 在代码正在执行的地方提供引用具体实例的方法。要把当前执行类实例的有关信息传递到另一个模块的过程,Me 非常有用。例如,假定模块中有以下过程:
Sub ChangeFormColor(FormName As Form)    FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)End Sub可以调用这个过程并使用下列语句将窗体类的当前实例作为参数传递。ChangeFormColor Me
有没有通俗易懂的回答,说实话,我看不懂{:301_1008:}

HarckerG 发表于 2021-8-6 17:02

x的声明在过程内 过程外 应该是不影响的,你可以F8逐步看看x有没有计算过程

Me的意思其实说白了 就是代表当前的窗体

HarckerG 发表于 2021-8-6 17:06

18702770531 发表于 2021-8-6 17:02
x的声明在过程内 过程外 应该是不影响的,你可以F8逐步看看x有没有计算过程

Me的意思其实说白了 就是代 ...

x在过程内,你每点一次按钮,x都会重新声明,相当于把x初始化了
x在过程外,那么不受private sub的影响,x不会在你点击按钮的时候初始化

林大钦 发表于 2021-8-6 17:07

我看我之前写的就是放在命令里啊。

我也不太懂,来学习一下。


无闻无问 发表于 2021-8-6 20:28

本帖最后由 无闻无问 于 2021-8-6 20:29 编辑

问题一是全局变量和局部变量的区别,放外面,x在保存结果,放里面,每单击就会初始化,不会累加

me代表当前窗体实例类,相当于c中的this,python中的self,如果窗体相当于对象房子,房子对象有名称,你要访问、设置、操作房子对象,你得使用 :对象房子名称.名称,xxxx.属性=xxxx
如果操作房子对象是当前正在使用对象或在其内部,就可用一个名字代替它而无需房子对象名称,这个名字就是Me,有点像汉语中的代词:我,你,他,她等。大家聊天,可以叫名字,也可以用你我他指代,道理类似…

cherrycdh 发表于 2021-8-9 15:17

无闻无问 发表于 2021-8-6 20:28
问题一是全局变量和局部变量的区别,放外面,x在保存结果,放里面,每单击就会初始化,不会累加

me代表 ...

谢谢,这样我就看懂了,十分感谢

cherrycdh 发表于 2021-8-9 15:18

18702770531 发表于 2021-8-6 17:02
x的声明在过程内 过程外 应该是不影响的,你可以F8逐步看看x有没有计算过程

Me的意思其实说白了 就是代 ...

十分感谢,看懂了
页: [1]
查看完整版本: 关于vba中的me问题与变量问题