2017-10-17 19 views
1

J'essaie de générer 3 listes sur une page qui montre la plage A: A des 3 jours précédents en utilisant la formule INDIRECTE et la concaténation (ex: INDIRECT ("'" & B2 & « 'A2" !) où B2 serait égal au nom de t, mais je dois tirer le nom de la feuille de jour avant (par exemple:. 10-17) dans la cellule B2Trouver le nom d'une feuille de calcul en utilisant la référence relative

J'ai un fonction de travail qui peut trouver la valeur d'une cellule dans une autre feuillepar emplacement relatif, mais je ne peux pas sembler obtenir le nom de la feuille par position relative.

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 

et une autre fonction qui peut renvoyer le nom de la feuille de la feuille:

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 

Mais je ne peux pas sembler les utiliser ensemble (ex: NextSheet (SheetName (A2)), ou SheetName (NextSheet (A2) Y at-il une fonction similaire que je pourrais utiliser pour retourner le nom de la feuille par position relative? Question secondaire: Est-ce que je ne peux pas appeler une fonction créée par l'utilisateur à l'intérieur d'une autre fonction créée par l'utilisateur comme celle-ci, ou est-ce qu'elle n'est pas correctement configurée pour être appelée l'une dans l'autre?

+0

Lorsque vous utilisez NextSheet, qu'attendez-vous comme un retour? Actuellement, il retournera le *** VALUE *** d'une cellule sur une page 3 de la référence. Et vous ne pouvez pas renvoyer la valeur en tant qu'objet range à Sheetname. –

Répondre

0

Partie 1:
Vous pouvez utiliser l'indexation d'Excel pour les objets Sheets.

Sans piégeage d'erreur:

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

Vous devrez traiter le cas d'essayer ceci sur la dernière feuille (Erreur 9: Subscript hors de portée)

partie 2:
Oui , les appels peuvent être imbriqués. La valeur de retour de l'un sera transmise dans le suivant, donc une fonction comme foo(bar(test(5))) est valide

+0

Cela semble fonctionner, mais comment initialiser Sheets (ActiveSheet.Index + 1) .Name dans VBA? –

+0

la fonction renvoie une chaîne. Il n'y a pas d'initialisation requise. Vous pouvez utiliser une autre référence de feuille à la place de 'ActiveSheet' si cela vous convient mieux – SeanC