vba中的sub全称(vba 怎么调用sub)
vba中的sub全称(vba 怎么调用sub),本文通过数据整理汇集了vba中的sub全称(vba 怎么调用sub)相关信息,下面一起看看。
创建新工作簿后VBE的工程资源管理器;
您可以看到对应于默认3个工作表的模块和工作簿模块ThisWorkbook。
选择sheet1,然后单击对象列表:
您可以看到一个可供选择的工作表对象。
选择此对象,将自动建立一个事件代码框架。在事件右边的列表:
对于工作簿对象也是如此:
您可以在“插入”菜单中插入三种类型的模块:用户窗体、模块和类模块。
用户表单是与用户交互的图形界面。表单本身和插入的控件都是一个对象:
类模块用于用户定义的类和对象:
当我们录制一个宏时,我们会自动将一个模块插入到项目浏览器中。默认名称是模块1 ,这是一个标准模块,与特定的工作表、工作簿和表单无关:
这是VBA的四个模块:标准模块,MicrosoftExcel工作簿和工作表对象,窗体和类模块。
模块是一组语句和过程。
声明:命名常量、变量或过程并指定其特征(如数据类型)的不可执行代码。对于DLLprocedures,声明指定名称、库和参数。
过程:可以作为一个单元执行的命名的语句序列。例如,Function、Property和Sub都是过程类型。进程的名称总是在模块级定义的,所有可执行代码都必须包含在进程中,一个进程不能嵌套在其他进程中。
我们平时写的代码有哪些?是的,它们是声明和过程,也就是用Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、module 1和class 1这样的东西写的代码,所以我们可以断定Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、module 1和class 1都是模块。
虽然这些被称为模块,但它们是不同的。事实上,微软是这样分类的:
文档模块:Sheet1,Sheet2,Sheet3,ThisWorkbook。
表单模块:UserForm1;
标准模块:模块1;
类模块:类1;
有人会问,sheet1和sheet2是微软提供的内置对象。怎么能称之为模块呢?诚然,在编写代码的过程中,它们确实是不同的对象。但是因为微软把这些东西单独提取出来,允许我们写代码去关联这些对象,所以它们有不同的含义,可以看作是微软定制嵌入的模块。因为我们可以在其中编写和存储代码,所以在这里,您应该将它们视为模块,而不是像范围和单元格这样的对象。这种思维的转变非常重要。在这里,我们将它们视为模块,而不是我们的公共对象。
其实作为一门VBA语言,源于VB,所以继承了VB语言的大部分功能,只是微软提供了Excel对象(或者Word对象,PPT对象等。)单独对VBA来说。因为VB本身提供了三种类型的模块:表单模块、标准模块和类模块。所以在VBA有这三个模块。为了操作Excel对象,微软给我们提供了文档模块,直接嵌入(Sheet1、Sheet2、ThisWorkbook等文档模块不需要插入,只要这个对象存在,就有这个文档模块)。因此,它解释了为什么VBA有这四个模块。
通过以上分析,我们知道VBA模块分为这四种类型。哪里能看到微软这样给他们分类?是对象吗(请一定要和Excel模型中Sheet1和Sheet2对象的概念分开,记住这里已经是模块了)?它们是什么物体?
从VBE资源管理器中我们可以看到,MicrosoftExcel对象(文档模块)、窗体(表单模块)、模块(标准模块)、类模块都在什么下面,没错,都在VBAProject下面:
什么是VBAProject?就是我们平时说的项目。其实就是VBAProject的一个对象。下列MicrosoftExcel对象(文档模块)、窗体(表单模块)、模块(标准模块)和类模块也是对象。它们是什么物体?VBComponent对象。现在我可以告诉你,这些模块是对象,叫做VBComponent。
为了解释这个问题,我们需要引入一个概念,VBAExtensibilityModel,它具有操作VBA项目和模块的功能:
(1)用代码添加和删除VBA模块(而不是手动插入和删除);
(2)用代码创建代码(有点绕路,应该是用代码构建一个模块,然后用代码在模块里写代码);
(3)创建用户表单;
VBA扩展模型的简单层次结构如下(仅供说明,未全部列出):
VBE
VBProject
VB组件
代码模块
设计师
财产
参考
窗户
命令栏
其实VBProject的对象就是我们的项目资源管理。
理器经常看到的,下面的Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模块1、类1就是VBComponent对象。在这里我们得出了一个结论:文档模块、标准模块、类模块、窗体模块是对象,一种叫做VBComponent的对象VBComponent对象有个type属性,清楚的告诉了我们Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模块1、类1分别属于什么模块,也就是上面所说的,微软是怎么对这些模块进行分类的呢,也就是type属性来告诉了我们这个问题。
我们用以下代码来展示这些模块都属于哪些类型。
Subtest()DimVBCompsAsVBComponents‘定义VBComponents类的对象变量DimVBCompAsVBComponent‘定义VBComponent类的对象变量‘这里我们借用了Thisworkbook这个对象来说明SetVBComps=ThisWorkbook.VBProject.VBComponents‘将对象的引用赋值给对象变量‘利用循环来获取工程内每个组件的名称和类型ForEachVBCompInVBCompsMsgBox"组件名称:"&VBComp.name&"组件常量"&VBComp.TypeNextEndSub通过代码的运行,我们发现Sheet1、Sheet2、Sheet3、Thisworkbook是一种类型,部件常数的值是100。
模块1是一种类型,部件常数的值是1;
类1是一种类型,部件常数的值是2;
UserForm1是一种类型,部件常数的值是3;
通过上面的叙述,总结起来只是一句话:
文档模块、标准模块、类模块、窗体模块是对象,并且都是一个叫做VBComponent的对象,根据VBComponent属性"type"(类型)的不同,微软把他们分为了4类:Vbext_ct_StdModule、Vbext_ct_ClassModule、Vbext_ct_MSForm、Vbext_ct_Document。
VB的代码存储在模块中。在VB中提供了三种类型的模块:窗体模块、标准模块和类模块。
简单的应用程序可以只有一个窗体,所用的程序都驻留在窗体模块中,而当应用程序庞大复杂时,就要另外附加窗体。最终可能有几个窗体中有一些共同都要执行的代码,为了在两个窗体中不产生重复代码,可创建一个独立的模块,用它实现代码公用。该独立模块即是标准模块。此外还可以建立包含共享代码与数据的类模块。
1窗体模块由于VB是面向对象的应用程序开发工具,所以应用程序的代码结构就是该程序在屏幕上表示的对应模型。根据定义,对象包含数据和代码。应用程序中的每个窗体都有一个相对应的窗体模块(文件扩展名为.frm)
窗体模块是VB应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、自定义类型和外部过程的窗体级声明。写入窗体模块的代码是该窗体所属的具体应用程序专用的;也可以引用该程序内的其它窗体和对象
每个窗体模块都包含事件过程,在事件过程中有为响应该事件而执行的程序段。窗体可包含控件。在窗体模块中,对窗体上的每个控件都有一个对应的事件过程集。除了事件过程,窗体模块还可包含通用过程,它对来自该窗体中任何事件过程的调用都作出响应。
2标准模块标准模块是程序中的一个独立容器,包含全局变量、Function(函数)过程和Sub过程(子过程)。
可将那些与特定窗体或控件无关的代码放入标准模块中。标准模块中包含应用程序内的允许其它模块访问的过程和声明。它们可以包含变量、常数、类型、外部过程和全局声明或模块级声明。
3类模块在VB中类模块是面向对象编程的基础。可以在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。
用类模块创建对象,这些对象可被应用程序内的过程调用。标准模块只包含代码,而类模块包含代码又包含数据,可视为没有物理表示的控件。
4标准模块和对象模块的区别文档模块、窗体模块是属于对象模块的,可以作为一类,标准模块则是不同的,属于另外一类。
4.1标准模块是不支持事件,对象模块都支持事件过程。
标准模块本身是没有事件过程的,这也就是说,你想写事件过程,绝对不要写到标准模块中去,当然你也写不进去。
4.2标准模块是一个独立容器,标准模块中的全局变量、Function(函数)过程和Sub过程(子过程)是不与对象模块相关联的。
同一个工程中的对象模块可以共享和使用标准模块中的全局变量和过程。但是对象模块的变量和过程,却是该对象模块专属的。如果想调用的话,必须以对象的方式访问。
这也就告诉我们一个原则。通常我们在写VBA代码的时候,应该把公用的变量和过程写到标准模块中来,和对象模块相关的变量和过程写到相应的对象模块中去,这样才不容易出现问题。
-End-
更多vba中的sub全称(vba 怎么调用sub)相关信息请关注本站。