我正在尝试编写一个函数,该函数返回函数所在的工作表的索引号。
我有这个:
Function Sheet()
Sheet = ThisWorkbook.ActiveSheet.Index
End Function
我在工作簿中有多个工作表,它们都使用该功能,但都需要参考他们自己的特定工作表。使用"活动表"只要我更新一张工作表,所有其他工作表就会将结果更改为新工作表,而不是保留在自己的工作表中。
有没有办法将函数限制为唯一的工作表?
答案 0 :(得分:2)
在Excel 2016,Excel 2013,Excel Online,Excel 2016 for Mac中,您可以使用内置Excel功能:
=SHEET()
否则,请使用chris neilsen方法或类似方式:Get sheet index number from cell reference (Function)
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
建议:将您的UDF名称从Sheet
更改为MySheet
之类的内容。
如果您希望公式获取工作表的名称(而不是索引),则可以使用此公式:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
答案 1 :(得分:1)
您可以使用Application.Caller
来获取UDF所在单元格的引用。从那里可以轻松获取索引
Function Sheet()
Dim rng as Range
Set rng = Application.Caller
Sheet = rng.Worksheet.Index
End Function
请参阅帮助以获取调用者的完整详细信息并添加适当的错误处理
答案 2 :(得分:1)
您还可以使用利用Excel的XLM语言
的范围名称(范围公式)=GET.WORKBOOK(1+0*RAND())
=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