ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

用宏表函数提取工作表名称

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-30 14:35 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:GET.DOCUMENT
本帖最后由 chrisfang 于 2014-4-3 18:41 编辑

知识点:宏表函数Get.Document应用
所属领域:函数和公式
原帖地址:http://club.excelhome.net/thread-161588-2-1.html
原帖作者:gouweicao78

这是个宏表函数取得工作表名称的“定义名称”
方法:【插入】>【名称】>定义shtname>在【引用位置】输入公式>
=SUBSTITUTE(GET.DOCUMENT(1),"["&GET.DOCUMENT(88)&"]",)&T(NOW())
>【确定】
在某单元格输入=shtname,就能返回该工作表名称。

详细解释如下:
1、首先,get.document(1)是宏表4.0函数(可以搜论坛下载一个帮助说明):
如果工作簿中不只一张表,用文字形式以“[book1]sheet1”的格式返回工作表的文件名。否则,只返回工作簿的文件名。工作簿文件名不包括驱动器,目录或窗口编号。通常最好使用 GET. DOCUMENT(76)
和 GET. DOCUMENT(88) 来返回活动工作表和活动工作簿的文件名。
get.document(88)以“book1”的形式返回活动工作簿的文件名。

2、=SUBSTITUTE(GET.DOCUMENT(1),"["&GET.DOCUMENT(88)&"]",)
——就是将[book1.xls]sheet1中的[]号及book1替换为空,得到sheet1

3、now()是一个易失性函数,随着Excel的一些动作比如编辑单元格等变化,产生当前时间(数值的一种),T()函数对文本返回文本自身,对数值返回空。所以&T(now())相当于&"",只不过这个""会随时变化。
这样连起来就使得我们用shtname得到的工作表名称是一个可以随着Excel动作(如改变工作表名也是动作)而“实时”变化的工作表名

常用的几个取当前工作表名的公式:(基本都是用宏表函数,套上文本处理)
=SUBSTITUTE(GET.DOCUMENT(76),"["&GET.DOCUMENT(88)&"]",)&T(NOW())
=REPLACE(GET.DOCUMENT(76),1,FIND("]",GET.DOCUMENT(76)),)&T(NOW())
=MID(GET.DOCUMENT(76),FIND("]",GET.DOCUMENT(76))+1,255)&T(NOW())

另:不用宏表函数取得工作表名称的方法:
在单元格中输入:
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)
——可得到工作表名,其原理同上,主要是利用CELL函数用"filename"作第1参数取得带路径的工作表名。
在定义名称中使用(强烈推荐):
shtname=MID(CELL("filename",!A1),FIND("]",CELL("filename",!A1))+1,255)
——这是个工作簿级的定义名称,可以得到工作簿中公式所在工作表的名称。
注意:CELL函数要求Excel文件已保存。







评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-3 16:22 | 显示全部楼层
神州第一才子四海无双巨匠的方版果然名不虚传
学习了 对汇总工作非常有用 还有宏表函数和cell用法的介绍
弱弱说一句最近发现VBA也很方便

TA的精华主题

TA的得分主题

发表于 2014-4-3 16:24 | 显示全部楼层
本帖最后由 羽希 于 2014-4-3 16:27 编辑

为什么宏表函数啊?微软为什么不将cell直接进行改进?

TA的精华主题

TA的得分主题

发表于 2016-3-11 15:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
定义名称用 =MID(GET.WORKBOOK(1),FIND("]",GET.WORKBOOK(1))+1,99)&T(NOW())之后,用=IFERROR(HYPERLINK("#"&INDEX(shname,ROW(A1))&"!A1",INDEX(shname,ROW(A1))),"") 取工作表名做目录,请问为什么会在表名有空格或者“-”的时候显示“reference not valid"? 我的公式是否有问题?

TA的精华主题

TA的得分主题

发表于 2016-10-1 15:44 | 显示全部楼层
用易失性函数是因为很多宏表函数不会自动更新

TA的精华主题

TA的得分主题

发表于 2019-1-14 18:51 | 显示全部楼层
如果 不用 宏表函数,怎么取得所有工作表名称?

就是说,想提取同一个工作簿里面的,所有工作表名称,而且 不用 宏表函数?

  1. shtname=MID(CELL("filename",!A1),FIND("]",CELL("filename",!A1))+1,255)
复制代码

上面这个名称仅适用于当前工作表,并不适合 “提取所有工作表”

因为加载宏的时候(许多人默认的宏安全性级别为高),许多人不知道在哪设置宏安全性(当多人使用表格的时候),所以感觉宏表函数对于许多人不很方便,我更希望,分享的表格大家都方便使用.

谢谢各位老师的关注.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 14:13 , Processed in 0.033156 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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