I couldn't get this to work trying to parse the variant string directly into INDEX however I did think of a way around it based on updating G1 (month number)
You could put some code in G1 such that if you double click on that cell it will ask end-user to enter month number, (see below) -- this could should reside in the worksheet on which the G1 value resides -- to do this activate the sheet in Excel that holds G1 and right click on the tab name and select view code, enter the below into that code.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim I1 As Variant
If Target.Address = "$G$1" Then
1
I1 = InputBox("Enter Month Number (1-12)", "Month No.", 1)
Select Case IsNumeric(I1)
Case True
If I1 < 0 Or I1 > 12 Then GoTo 1
Case False
GoTo 1
End Select
Target.Value = I1
Cancel = True
Call REVISE_NAMES(Int(I1))
End If
End Sub
Sub REVISE_NAMES(mx As Integer)
Dim str As Variant
str = "='C:\[ZZZ08.xls]Forecast'!$B$19:$M$19"
str = Replace(str, "ZZZ", Format(DateSerial(2000, mx, 1), "mmm"))
ActiveWorkbook.Names.Add Name:="test", RefersTo:=str
End Sub
Now in theory what this will do is keep a given named range (test) up to date referring to the appropriate external file pending month value....
Once the month has been updated then you could use INDEX as normal but use test as range, eg:
=INDEX(test,1,1)
Obviously the above was based on using sample files C:\Apr08.xls and C:\May08.xls
If this is something you think you would want to make use of let me know and we can look at altering to meet your own specific requirements.
However, I remain convinced there must be a simpler way of doing this (avoiding INDIRECT) so look forward to others' posts.