2017-10-17 6 views
1

Ich versuche, 3 Listen auf einer Seite zu generieren, die den A: A-Bereich der vorherigen 3 Tage Blätter mit der indirekten Formel und Verkettung (zB: INDIREKT ("'") & B2 & "'! A2") wobei B2 gleich dem Namen von t wäre, aber ich muss den Namen des Blattes des Vortages (zB: 10-17) in Zelle B2 ziehenSuchen Sie den Blattnamen eines Arbeitsblatts mit relativer Referenz

Ich habe eine Arbeitsfunktion, die den Wert einer Zelle in einem anderen Blatt durch die relative Position finden kann, aber ich kann nicht durch die relative Position der Blattnamen zu bekommen scheinen.

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 

und eine andere Funktion, die den Blattnamen des Blattes zurückgeben kann:

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 

Aber ich kann nicht sie scheinen zusammen zu verwenden (zB: NextSheet (Sheetname (A2)) oder Sheetname (NextSheet (A2)) Gibt es eine ähnliche Funktion, die ich verwenden könnte, um den Blattnamen durch die relative Position zurückzugeben?

Nebenfrage: Kann ich eine vom Benutzer erstellte Funktion nicht innerhalb einer anderen vom Benutzer erstellten Funktion aufrufen, oder sind sie einfach nicht richtig eingerichtet, um ineinander aufgerufen zu werden?

+0

Wenn Sie NextSheet verwenden, was erwarten Sie als Rückgabe? Derzeit wird der *** VALUE *** einer Zelle auf einer Seite 3 von der Referenz zurückgegeben. Und Sie können den Wert als Bereichsobjekt nicht als Sheetname angeben. –

Antwort

0

Teil 1:
Sie können die Indizierung verwenden, die Excel für die Sheets-Objekte hat.

ohne Fehler Trapping: (: Index außerhalb des zulässigen Bereichs Error 9)

Teil 2:

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

Sie werden mit dem Fall zu versuchen, diese auf dem letzten Blatt zu tun haben
Ja , Anrufe können verschachtelt werden. Der Rückgabewert von eins wird in den nächsten übergeben, so dass eine Funktion wie gültig ist

+0

Dies scheint wie es funktionieren würde, aber wie würde ich Sheets (ActiveSheet.Index + 1) .Name in VBA initialisieren? –

+0

Die Funktion gibt eine Zeichenfolge zurück. Es ist keine Initialisierung erforderlich. Sie können einen anderen Blattverweis anstelle von 'ActiveSheet' verwenden, wenn es Ihnen besser passt – SeanC

Verwandte Themen