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语言的范围名称(范围公式)

  • 定义范围名称ShtNames,如
    =GET.WORKBOOK(1+0*RAND())
  • 定义第二个范围名称,ShtName为
    =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")),"")