VBA语言专业教育 潜水
  • 5发帖数
  • 4主题数
  • 0关注数
  • 0粉丝
开启左侧

工作簿中的代码与工作表模块中的代码

[复制链接]
 楼主| VBA语言专业教育 发表于 2021-8-8 07:07:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
【分享结果,随喜正能量】善良是一种人格的信念、道德的能量,是这个世界上唯一不用沟通而能相互通报的一种精神。人生了然处,让心安住于一泓澄澈:一念慈悲,人心清凉;一念向善,生命清凉;一念平等,世界清凉。态度决定了环境的好坏,为了自己不烦闷,起首做到不担心。担心是一种心态,烦闷是一种病症。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的代价。
教程共两册,八十四讲。今日的内容是专题二“VBA代码分类及如何利用代码自动关闭空闲文件”的第2讲:工作簿中的代码与工作表模块中的代码

                               
登录/注册后可看大图

第二节 工作簿和工作表模块代码(Workbook And Sheet Modules)

工作簿和工作表模块是直接绑定到工作簿对象和每个工作表对象的特殊模块。工作簿的模块称为ThisWorkbook,每个工作表模块的名称与其所属工作表的名称类似。这些模块应该包罗对象的事件过程,仅此而已。如果将事件过程放在尺度代码模块中,Excel将找不到它们,因此不会执行它们。如果将普通过程放在工作簿或工作表模块中,则在不完全限定引用的情况下无法调用它们。
1 工作簿和工作表对象的名称的获得

工作簿和工作表模块有一个名为CodeName的属性,这是VBA内部了解对象的方式。默认情况下,工作簿代码名为ThisWorkbook,对于工作表,每个工作表模块都是Sheet1、Sheet2等,对于图表,则是Chart1、Chart2等。在VBA代码中可以像利用普通变量一样利用这些名称。例如:
Sub MYNZA()
MsgBox ThisWorkbook.Name
MsgBox Sheet1.Name
End Sub
代码运行结果:

                               
登录/注册后可看大图


                               
登录/注册后可看大图

这很有用,因此您可以始终引用工作表,例如,即利用户从Excel重定名工作表。例如,如果有一个名为“Sheet1”的工作表,则其名称和代码名都将为Sheet1。但如果用户将工作表重定名为MySheet,则代码
Msgbox Worksheets("Sheet1").Name
将失败,因为不再有名为Sheet1的工作表。但是,代码
Msgbox Sheet1.Name
将继续工作,因为VBA仍通过其代码名Sheet1知道该工作表。
2 工作簿和工作表对象的重定名

在上面的讲解中我们了解到:工作簿的模块称为ThisWorkbook,每个工作表模块的名称与其所属工作表的名称类似。那么是否可以更改这个名称呢?
可以更改ThisWorkbook或Sheet对象的代码名。若要更改模块的代码名,可在“项目资源管理器”窗口中选择该模块,然后打开“属性”窗口(F4或从“视图”菜单中),更改“名称”属性。这里须要留意一点如果在这些模块中已经有了代码之后再执行此操作,大概会遇到题目。下面结合两个例子来说明:
a 更改ThisWorkbook对象的代码名,这时ThisWorkbook将继续引用工作簿对象。例如,如果将ThisWorkbook对象的代码名更改为MyWorkbook,则以下两行代码都将工作:
Sub MYNZB()
'更改名称ThisWorkbook为MyWorkbook
MsgBox ThisWorkbook.Name
MsgBox MyWorkbook.Name
End Sub
代码截图:

                               
登录/注册后可看大图

代码的运行:

                               
登录/注册后可看大图


                               
登录/注册后可看大图

b 如果将Sheet1对象的代码名更改为MySheet1,由于不再有代号为Sheet1的工作表对象,则以下代码将失败
Sub mynzc()
MsgBox Sheet1.Name
End Sub

                               
登录/注册后可看大图

运行结果:

                               
登录/注册后可看大图

c 此外,还可以利用VBA过程更改对象的代码名。例如:要将代码名为Sheet1的工作表的代码名更改为NewCodeName,请利用
ThisWorkbook.VBProject.VBComponents("Sheet1").Name= "NewCodeName"
要将MyWorkbook代码名改为NewWBName可以利用下面代码:
ThisWorkbook.VBProject.VBComponents("MyWorkbook").Name = "NewWBName"
全部代码如下:
Sub mynzd()
ThisWorkbook.VBProject.VBComponents("Sheet1").Name = "NewCodeName"
ThisWorkbook.VBProject.VBComponents("NewCodeName").Name = "Sheet1"
End Sub
代码截图:

                               
登录/注册后可看大图

运行结果:

                               
登录/注册后可看大图

大家要留意上面的操作,大概会导致很多题目,所以除非我们事先知道自己在做什么,而且必须要做这种更改,否则不要进行这样的操作。
例如:当我们更改ThisWorkbook对象的代码名,下面的代码:
Msgbox ThisWorkbook.Name 将继续工作,但
Msgbox ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Name
将失败,因为没有代码名为ThisWorkbook的对象,除非有一个ThisWorkbook的对象在对象浏览器中存在。
本节知识点回向:工作薄和工作表模块有什么特点?如何更改他们的名称?更改名称时要留意哪些题目?
本节内容详细代码“参考003工作表.XLSM”

                               
登录/注册后可看大图

我20多年的VBA实践履历,全部浓缩在下面的各个教程中,教程学习顺序:
① 7→1→3→2→6→5或者7→4→3→2→6→5。
② 7→8
各套教程内容简介:
第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解
第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程
第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)
第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解
第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解
第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用
第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解
第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

  • 第六套教程:VBA信息获取与处理,是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。

精彩评论2

虚无133578089 发表于 2021-8-8 10:32:10 | 显示全部楼层
转发了
大战百杠精 发表于 2022-3-11 02:42:21 | 显示全部楼层
转发了
猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城