猿问

excel vba public函数调用相关问题?

1、定义成public函数后,是在本excel工作簿中所有的过程和函数都可以调用,还是所有打开的excel工作簿都可以调用这个public函数?
2、在一个模块中定义一个public函数和在一个工作表中定义一个public函数,调用时方法一样吗?还是在工作表中定义的public函数要把workbook、worksheet都写全?
比如:在当前工作簿中的sheet(1)里定义了public函数Func1,在sheet(2)里的Func2调用Func1是写成:
方法1:Private Function Func2()
Func1
End Function
方法2:Private Function Func2()
ThisWorkBook.Sheets(1).Func1
End Function
方法1和方法2哪个对,我用方法1老是报错Func1没被定义,用方法2就没问题,为什么?
3、如果调用public函数时要把路径写全的话,如问题2中的方法2,是不是意味着不同sheet中定义的public函数可以重名呢?
4、在一个sheet中,如果直接用Range(“A1”)或Cells(1,1)是代表本sheet的单元格吧,为什么我这么用报错呢?把路径写全就可以,比如ThisWorkBook.Sheets(1).Range(“A1”),为什么?
5、事件函数,比如按钮的Click事件,CommandButton1_Click(),这个函数是在点击按钮时触发了Click事件才会被执行的呢,还是我可以在别的函数里调用这个Click函数,比如:我想在点击button2时触发button1的Click事件
Sub CommandButton1_Click()
Call CommandButton2_Click
End Sub
这样写可以吗?

德玛西亚99
浏览 1220回答 2
2回答

小唯快跑啊

1)只能在本工作表中使用。(你同时打开2张表,注意看一下模块所属的表,会发现模块是属于特定工作表的)2)是需要写全。这个问题其实和第一个问题有点类似。每个函数是有其自己的作用域的。程序中叫名字空间。把sheet1,sheet2比喻成2个班级。sheet1中有个叫Func1的同学。而sheet2中没有。所以你要让人家知道Func1就必须告诉他们是那个sheet1班级里的Func1同学。否则有可能sheet3中也有个叫Func1的。就会混淆。3)是的。他们的名字域(namespace)是不一样的。4)这要看你把代码写在哪里,如果写在模块中,就有可能报错。如果写在特定sheet中,然后在模块里调用是没有问题的。5)如果你非要这么做也是可以的。但我建议你把button1的click事件所触发的内容写成一个函数,通过在2个事件里都调用这个函数来实现。而不要直接调用另一个事件函数。总的来说,你所疑惑的是关于函数的作用域问题。希望我的解释能帮助你理解。
随时随地看视频慕课网APP

相关分类

Java
我要回答