本帖最后由 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文件已保存。