2017-10-17 74 views
1

我想在一个页面上生成3个列表,显示A:使用INDIRECT公式和连接的前3天表单的范围(例如:INDIRECT(“'” & B2 &“'!A2”)其中B2将等于t的名称,但我需要将前一天的工作表名称(例如:10-17)放入单元格B2中。使用相对引用查找工作表的名称

我有一个工作功能,可以找到另一片由相对位置的细胞的价值,但我似乎无法通过相对位置来获得工作表名称。

Function NextSheet(rCell As Range) 
    Application.Volatile 
    Dim i As Integer 
    i = rCell.Cells(1).Parent.Index 
    NextSheet = Sheets(i + 3).Range(rCell.Address) 
End Function 

而且可以返回表的表名称的另一个功能:

Function SheetName(rCell As Range, Optional UseAsRef As Boolean) As String 
    Application.Volatile 
     If UseAsRef = True Then 
      SheetName = "'" & rCell.Parent.Name & "'!" 
     Else 
      SheetName = rCell.Parent.Name 
     End If 
End Function 

但我似乎无法同时使用它们(即:NextSheet(SHEETNAME(A2)),或SHEETNAME(NextSheet(A2) )有没有类似的功能可以用来通过相对位置返回表单名称?

第二个问题:我可以不在另一个用户创建的函数内部调用用户创建的函数吗?或者它们只是没有正确设置而被相互调用?

+0

当您使用NextSheet时,你期待什么作为返回?目前它将返回参考文献中第3页上单元格的*** VALUE ***。并且您无法将该值作为范围对象返回给Sheetname。 –

回答

0

第1部分:
您可以使用Excel为Sheets对象创建的索引。

由于没有错误捕获:

Sheets(ActiveSheet.Index + 1).Name 
'or 
Sheets(Sheets("Sheet1").Index + 1).Name 

你将不得不处理的最后一片尝试这种情况(错误9:下标越界)第2部分


是,调用可以嵌套。从一个返回值将被传入下一个,所以像foo(bar(test(5)))这样的函数是有效的

+0

这看起来好像会起作用,但是如何初始化VBA中的表格(ActiveSheet.Index + 1).Name? –

+0

该函数返回一个字符串。不需要初始化。如果它更适合你,你可以使用另一个表单引用来代替'ActiveSheet' – SeanC