dynamic表索引号
我想写一个函数,返回该函数所在工作表的索引号。
我有这个:
Function Sheet() Sheet = ThisWorkbook.ActiveSheet.Index End Function
我在工作簿中有多个工作表都使用该function,但都需要参考他们自己的特定工作表。 当我更新一个工作表时,使用“activesheet”,所有其他工作表将其结果更改为新的工作表,而不是保留在自己的工作表中。
有没有办法将函数限制在唯一的工作表上?
在Excel 2016,Excel 2013,Excel Online,Excel 2016 for Mac中,您可以使用内置的Excelfunction:
=SHEET()
否则,使用chris neilsen方法或类似的方法: 从单元格引用获取图表索引号(函数)
Function SheetNum(Optional celRef As Range) As Long With Application.Caller.Parent If celRef Is Nothing Then SheetNum = .Index Else SheetNum = celRef.Parent.Index End If End With End Function
build议 :将您的UDF的名称从Sheet
更改为像MySheet
任何MySheet
。
如果你想要一个公式来获得工作表的名字(而不是索引),你可以使用这个公式:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
您可以使用Application.Caller
来获取对UDF所在单元格的引用。从中可以轻松获取索引
Function Sheet() Dim rng as Range Set rng = Application.Caller Sheet = rng.Worksheet.Index End Function
有关呼叫者的详细信息,请参阅帮助,并添加适当的error handling
您也可以使用利用Excel的XLM语言的范围名称(范围公式)
- 定义范围名称ShtNames as
=GET.WORKBOOK(1+0*RAND())
- 定义第二个范围名称, ShtName as
=GET.CELL(32+0*NOW(),INDIRECT(SUBSTITUTE(REFTEXT(!$A$1),1,""),FALSE))
然后在你想要索引的表格中,
=MATCH(ShtName,ShtNAmes,0)
更新Fadi的问题
您可以使用下面的公式(来自任何工作表)来返回工作表名称以查找AllSheets ,而不是添加第二个名称。所以,在工作表1的A1
中
=MATCH(RIGHT(CELL("filename",Sheet2!A1),LEN(CELL("filename",Sheet2!A1))-FIND("[",CELL("filename",Sheet2!A1))+1),AllSheets,0)
将返回Sheet2
的表单位置