ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3077|回复: 10

[讨论]浅谈代码名(Sheet1)在VBA中的使用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-12-26 00:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:工作表和工作簿
本帖最后由 su45 于 2012-3-31 18:41 编辑

Sheet1是什么?要回答这个问题,首先要搞清楚工作表。
       我们都知道,一个工作簿有多个工作表,可每张工作表都有两个名字,就不一定大家都知道了。一个是大家常用的工作表名称,也就是标签上显示的名称(如下图中右边的“567”、“abc”、“aabb”等),它是显性的。另一个则是代码名,而这上名字在工作表窗口是看不到的(如见下图左边的Sheet1、Sheet2……、表一 ),代码名却是隐性的。那么这两个名字有什么区别呢?
       其实它们最大的区别就是可写性。
       工作表名可以随意修改,平常大家都是通过来标签名修改,或用VBA语句来修改,如Sheets(1).Name="abc" ,而且也能用VBA读取该表的工作表名,如 MySheet=Sheets(1).Name  。在VBA中的对象引用时一般是:Sheets("aabb")
       而代码名就不同了,虽然用VBA可以获得一个工作表的代码名,但却不能用VBA代码修改代码名。获取代码名的语句是:MySheet=Sheets(1).CodeName  ,但用Sheets(1).CodeName="abc" 修改代码名是不可以得,因为CodeName是只读的。那么代码名能不能修改呢?可以!但必须在VBA编辑器中通过属性来修改。图中的“表一”就是这样修改的。代码名在VBA中可直接引用,如:Sheet1、表一……。


20071226_5990c017bd90fdf62b31FkmjOmv6hwsw.png
      由此可见,代码名在一个工作簿中是相对稳定的,不会轻意被改变。
       需要说明的是,两种名字中修改任一个名字都不会影响另一个。即:修改工作表名,代码名不会变;修改代码名,工作表名不会变。
      了解了工作表的这两个名字的不同,我们在VBA编写时也就能正确使用工作表对象了。先看段代码:(见附件)
Sub aa()
    x=Sheets(1).[A1]       '用Sheets的index值确定工作表对象
    y=Sheet1.[A1]          '用工作表代码名来确定工作表对象
    z=Sheets("567").[A1]   '用工作表名来确定工作表对象
    r = 表一.[A1]          '用工作表代码名来确定工作表对象
    End Sub
表中[A1]的值是:12345
运行后,在一般情况下,x、y、z的值都是12345 ,但当你第一个表拖到最后时,运行的结果就不一样了,此时,x的值就不是12345了,而y和z的值仍是12345,原因是Sheets(1)是所有工作表中的所显示的第一张表;当你将名为“567”的表名改为“789”时,第三句代码就会出错,因为已经没有“567”这个表了。而y值仍是12345。
       通过实例,我们可得出以下结论表:
20071226_4db648ccd93821cf38e2cORik1J8iDp3.png
以上是本人体会,不妥之处望指正。


[attach]313265[/attach

2Anzr117.rar

5.19 KB, 下载次数: 31

[讨论]浅谈代码名(Sheet1)在VBA中的使用

TA的精华主题

TA的得分主题

发表于 2007-12-26 07:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-26 07:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-26 22:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-27 02:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

有些高深。。

哥们我暂时用不到这个。

友情up下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-27 20:25 | 显示全部楼层
QUOTE:
以下是引用ladefoged在2007-12-27 2:19:51的发言:

有些高深。。

哥们我暂时用不到这个。

友情up下。

这个还“高深”?!这应是基础呀!还自认为通俗易懂。惭愧!

TA的精华主题

TA的得分主题

发表于 2007-12-27 21:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-6-30 15:54 | 显示全部楼层

第三种,封装成dll时,不能识别。即前面不能加Application.Sheet1,不知有何法可解。

用Application.ThisWorkbook.VBProject.VBComponents("Sheet").Activate
可先激活在用ActiveSheet调用,但是较麻烦。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-3 12:18 | 显示全部楼层
QUOTE:
以下是引用agstick在2008-6-30 15:54:06的发言:

第三种,封装成dll时,不能识别。即前面不能加Application.Sheet1,不知有何法可解。

用Application.ThisWorkbook.VBProject.VBComponents("Sheet").Activate
可先激活在用ActiveSheet调用,但是较麻烦。

没封装过dll,但我想Application.Sheet1肯定是不行的,Sheet1的所属对象不是Application。希望版主能想到个好办法!

TA的精华主题

TA的得分主题

发表于 2008-7-3 15:10 | 显示全部楼层

代码修改Codename,此代码需要 "信任对vb项目的访问":

Sub test()
    ThisWorkbook.VBProject.VBComponents(Sheets("Sheet1").CodeName).Name = "ChangeCodename"
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 02:30 , Processed in 0.064933 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表