Excel 动态表索引号
我试图编写一个函数,返回函数所在工作表的索引号 我有这个:Excel 动态表索引号,excel,vba,Excel,Vba,我试图编写一个函数,返回函数所在工作表的索引号 我有这个: Function Sheet() Sheet = ThisWorkbook.ActiveSheet.Index End Function 我在工作簿中有多个工作表,它们都使用该功能,但都需要参考自己的特定工作表。使用“活动工作表”,只要我更新了一张工作表,所有其他工作表就会将结果更改为新工作表,而不是保留到自己的工作表 是否有办法将函数限制为仅在其所在的工作表中使用?您可以使用Application.Caller获取对
Function Sheet()
Sheet = ThisWorkbook.ActiveSheet.Index
End Function
我在工作簿中有多个工作表,它们都使用该功能,但都需要参考自己的特定工作表。使用“活动工作表”,只要我更新了一张工作表,所有其他工作表就会将结果更改为新工作表,而不是保留到自己的工作表
是否有办法将函数限制为仅在其所在的工作表中使用?您可以使用
Application.Caller
获取对UDF所在单元格的引用。从那里很容易得到索引
Function Sheet()
Dim rng as Range
Set rng = Application.Caller
Sheet = rng.Worksheet.Index
End Function
有关调用方的完整详细信息,请参阅帮助,并在Excel 2016、Excel 2013、Excel Online、Excel 2016 for Mac中添加适当的错误处理。您可以使用内置的Excel功能:
=SHEET()
否则,使用chris neilsen方法或类似方法:
建议:将UDF的名称从Sheet
更改为类似MySheet
的名称
如果希望公式获取工作表(而不是索引)的名称,可以使用以下公式:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
您还可以使用使用Excel的XLM语言的范围名称(范围公式)
=GET.WORKBOOK(1+0*RAND())
=GET.CELL(32+0*NOW(),间接(替换(REFTEXT(!$a$1),1,“”,FALSE))
=匹配(ShtName,ShtNAmes,0)
法迪问题更新
不必添加第二个名称,您可以使用以下公式(来自任何工作表)返回工作表名称以查找所有工作表
在第1页的A1
中这样说
=MATCH(右(单元格(“文件名”,Sheet2!A1),LEN(单元格(“文件名,Sheet2!A1))-FIND(“[”,单元格(“文件名”,Sheet2!A1))+1),AllSheets,0)
将返回
Sheet2的工作表位置
您所说的“函数所在的工作表”是什么意思?您的VBA内容保存在工作簿(甚至外部)中,而不是保存在工作表中。如果您是指调用函数的工作表,则将值保存在(隐藏)中工作表中的单元格?也是-应用程序。ThisCell
他将如何在UDF中使用sheet()
?我不认为这是WorksheetFunction类的成员。@RonRosenfeld,sheet是Excel 2016中的内置函数,那么我们不需要任何UDF,只需使用=sheet()
,请参阅:这对他的问题有什么帮助,即找出UDF位于哪个工作表上?@RonRosenfeld,从问题和代码中我们知道他需要返回工作表的索引,我认为UDF不能返回多个值,如果他有一个UDF返回其他值,那么他不能使用它返回工作表dex也是。我把这个问题解释为让他的UDF确定它所在工作表的索引。这可以通过Application.Caller.worksheet.index
(如果从工作表调用UDF)。我不知道他希望UDF将工作表索引返回到工作表的何处。UDF’谢谢@brettdj,我希望我可以不止一次地对这个答案进行投票,但我有一个问题:=shtNames
公式返回第一个工作表名称,我们可以使用它返回其他工作表名称吗,我尝试了=shtNames(2)
并获取#REF!
。我的(命名范围)名称是ShtNames
,因此我将所有工作表
替换为ShtNames
,它在Excel 2010和2016上都能完美工作,再次感谢您的帮助。
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")