ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]山深处的美丽——Excel工作表探密

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-10-30 13:56 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:工作表和工作簿
山深处的美丽——Excel工作表探密
分类:ExcelVBA>>ExcelVBA对象模型编程>>常用对象>>工作表
周末游了清江的一小段,隔河岩至高坝洲之间的一小段,感觉到清江山水的美丽,被清彻透底的水所环绕的山深处的养丽……
言归正传,在Excel工作表对象及其方法和属性中,也存在着一些细微的差异要深入发掘和探索,而这些差异在编程过程中是值得关注的,因此,我们也需要注意这些差异,以正确的使用它们。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-30 13:58 | 显示全部楼层
Sheets集合与Worksheets集合的区别
Sheets集合代表当前工作簿中的所有工作表,包括图表工作表、对话框工作表和宏表。
Worksheets集合仅代表当前工作簿中的所有工作表。
如下图1所示的工作簿。
  图1
在VBE编辑器中输入如下代码进行测试:
MsgBox Sheets(1).Name  ‘返回Chart1
MsgBox Worksheets(1).Name ‘返回Sheet1
MsgBox Sheets.Count ‘返回6
MsgBox Worksheets.Count ‘返回3

[分享]山深处的美丽——Excel工作表探密

[分享]山深处的美丽——Excel工作表探密

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-30 14:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Activate方法与Select方法的区别
当需要激活或者是选择某个工作表时,使用Sheets(1).ActivateSheets(1).Select的作用表面上看起来是相同的。但是,如果将需要激活或者是选择的工作表隐藏后,使用Sheets(1).Select将会出现错误,而使用Sheets(1).Activate则会正常运行。如下代码:
‘- - - 下面的代码运行正常 - - - -
Sub test1()
Sheets(1).Visible = xlHidden
  Sheets(1).Activate
End Sub
‘- - - 下面的代码运行错误,作用于对象的方法无效 - - - -
Sub test2()
Sheets(1).Visible = xlHidden
Sheets(1).Select
End Sub
Activate方法是用来激活对象的方法,而Select方法是用来选取对象的方法,能使用Select方法一次选取多个工作表,但不能使用Activate方法一次激活多个工作表,一次只能激活一个工作表。见下面的代码示例:
‘- - - 下面的代码运行正常 - - - -
Sub Test3()
  ActiveWorkbook.Sheets(Array(1, 2, 3)).Select
End Sub
‘- - - 下面的代码运行错误,对象不支持该属性和方法 - - - -
Sub Test4()
  ActiveWorkbook.Sheets(Array(1, 2, 3)).Activate
End Sub
当然,上述内容同样适用于Worksheets集合。
[此贴子已经被作者于2006-10-30 14:03:25编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-30 14:01 | 显示全部楼层

工作表名称的使用
可以在代码中采用下面的三种方式引用工作表:
(1) 该工作表在工作簿中的位置(索引号)。索引号自工作表标签最左边向右依次计数,最左边的是第1个工作表,依次为第2个、3个……等等。
(2) 该工作表的名称,即在工作表左下角中看到的工作表标签中的名称。
(3) 该工作表的对象名称,即在创建工作表时自动分配给该工作表的名称(在VBE编辑器中的工程窗口中可以看到)。
通常,在代码中引用工作表时,我们所使用的是工作表对象的Index属性和Name属性,例如 Worksheets(1).Select或者Worksheets(“Sheet1”).Select
但是,如果工作表的名称被改变或者工作表被重新排序或者删除其中的一些工作表后,则不能使用工作表对象的Name属性或Index属性引用所需要的工作表,这可能使已经编写好的代码出现错误。因此,我们应该考虑虽然工作簿中的工作表改变但不影响工作表引用的办法,可以使用工作表对象的名称避免这种情况,即上面所讲的第3种方式,无论是在工作簿中增加或删除其它工作表,还是对工作表排序,或者是重命名需要引用的该工作表,其对象名都不变(除非您删除该工作表,或者是在VBE窗口中重命名该对象)。工作表对象的名称可以在VBE编程器中看到,如下图2所示。例如,Sheet1(Sheet1),左边是工作表对象的名称,右边的括号中是工作表名,括号中的工作表名可以通过在工作簿界面中改变相应的工作表标签名来改变,如果在工作表中重命名Sheet1工作表为“数据工作表”,则工程属性窗口中的名称为:Sheet1(数据工作表)。在下图2中,工作表Sheet3的对象名称是“主工作表”,而在Excel中,如果改变工作表Sheet3的名称为“数据工作表”,在VBE编程器的工程窗口中,“Sheet3”将变成“数据工作表”,但是该工作表的对象名称仍为“主工作表”,如下图3所示。
    图2       图3
改变工作表对象名称的方法是,通过改变属性窗口中的(名称)或者在代码中使用Properties("_CodeName")。下面的代码将会添加一个工作表并将该工作表的对象名称命名为"ws_main",这样,在以后的代码中就可以使用该对象名称来引用这个工作表,而不必担心工作表名称改变或工作表顺序改变。
Sub ChageWksObjectName()
  Dim ws As Worksheet
  Dim sPrevCodeName As String
  Dim sNewCodeName As String
  '设置新对象的名称
  sNewCodeName = "ws_main"
  '增加新工作表
  Set ws = Worksheets.Add
  '获取新增工作表的对象名称
  sPrevCodeName = ws.CodeName
  '变化新增工作表的对象名称
  ThisWorkbook.VBProject.VBComponents(sPrevCodeName). _
                        Properties("_CodeName") = sNewCodeName
End Sub
‘- - - - - - - - - - - - - - - - - - - - - -
Sub Test()
  ws_main.Range("A1").Value = "This is it!"
End Sub
下面的示例简单的介绍了工作表的引用方法。在示例中,使用了工作表Sheet1。
(1) 指定工作表的位置激活工作表。下面的代码激活工作簿中的第1个工作表,即工作表标签最左边的工作表。(如果增加或删除了其中某工作表,或者是对工作表进行排序后,可能引用的不是您想引用的工作表)
Sub ActivateFirstsheetInBook()
Sheets(1).Activate
End Sub
或者:
Sub ReferenceShtByIndexNumber()
Sheets(1).[A1:D4].Copy Sheets(2).[A1]
End Sub
(2) 通过工作表的名称激活工作表,而不管工作表处于工作簿中的什么位置以及工作表对象的代码名称。(如果该工作表被重命名后,运行代码会出错)
Sub ActivateSheet1_1()
Sheets("Sheet1").Activate
End Sub
或者:
Sub ReferenceShtByGivenName()
[Sheet1!A1:D4].Copy [Sheet2!A1]
End Sub
(3) 通过工作表对象的名称激活工作表,而不管该工作表处于工作簿中的什么位置以及该工作表的名称)
Sub ActivateSheet1_2()
Sheet1.Activate
End Sub
或者:
Sub ReferenceShtByCodeName()
Sheet1.[A1:D4].Copy Sheet2.[A1]
End Sub

By fanjy in 2006-10-30

[此贴子已经被作者于2006-10-30 14:05:35编辑过]
5WAXCYb6.jpg
FFj3CcMF.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-10-30 14:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

学习学习!

TA的精华主题

TA的得分主题

发表于 2006-10-30 15:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-10-30 15:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

fanjy兄又出新东西了,可喜可贺。

学习。

TA的精华主题

TA的得分主题

发表于 2006-10-30 15:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-10-30 15:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以前还真没有注意这事儿,楼主真牛!

TA的精华主题

TA的得分主题

发表于 2006-10-30 19:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哈哈,还没看完,的确很精彩。先顶了再看。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 15:20 , Processed in 0.044766 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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