0

我正在尝试使用一个允许我从以前的工作表中导入范围的函数。我不确定我当前的宏是否允许这样做。我可以手动调用上一个工作表,但不能使用我拥有的功能。

这是我手动输入工作表名称时可以正常工作的功能:

=IFERROR(VLOOKUP(D3,Aug9Daily!$D$3:$F$50,3, FALSE),"")

这是我尝试使用的功能:

=IFERROR(VLOOKUP(D3,NextSheetName()$D$3:$F$50,3, FALSE),"")

这是我用于 NextSheetName 宏的 VBA:

Function NextSheetName(Optional WS As Worksheet = Nothing) As String
    Application.Volatile True
    Dim S As String
    Dim Q As String
    If IsObject(Application.Caller) = True Then
        Set WS = Application.Caller.Worksheet
        If WS.Index = WS.Parent.Sheets.Count Then
            With Application.Caller.Worksheet.Parent.Worksheets
                Set WS = .Item(1)
            End With
        Else 
            Set WS = WS.Next
        End If
        If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
            Q = "'"
        Else
            Q = vbNullString
        End If
    Else
        If WS Is Nothing Then
           Set WS = ActiveSheet
        End If
        If WS.Index = WS.Parent.Worksheets.Count Then
            With WS.Parent.Worksheets
               Set WS = .Item(1)
            End With
        Else
            Set WS = WS.Next
        End If
        Q = vbNullString
    End If
    NextSheetName = Q & WS.Name & Q
End Function

我究竟做错了什么?有没有更好的方法从另一个工作表中动态选择一个范围?

4

2 回答 2

3

试试这个,看看它是否适合你修复你的函数的输出:

NextSheetName =  Q & WS.Name & Q & "!"

然后你需要在一个间接函数中连接输出,如下所示:

=IFERROR(VLOOKUP(D3,INDIRECT(NextSheetName() & "$D$3:$F$50"),3, FALSE),"")
于 2012-08-13T18:30:05.397 回答
0

我发现这个小 UDF 很方便:

Function sheet_offset(rng As Range, i As Integer) As Range
    Application.Volatile 'necessary since value can change even when values of parameters do not
    Set sheet_offset = rng.Worksheet.Parent.Worksheets.Item(rng.Worksheet.Index + i).Range(rng.Address)
End Function

将 rng 偏移 i 个工作表 - 例如,i=0 表示同一工作表,i=-1 表示上一个工作表,而 i=1 表示下一个工作表。

在您的示例中,您将使用:

IFERROR(VLOOKUP(D3,sheet_offset($D$3:$F$50,1),3, FALSE),"")

这将偏移范围以引用下一个工作表。

请注意,要相对于当前工作表(如您的工作表)进行引用,您不会指定工作表。要进行绝对引用,只需在引用中指定一个工作表(例如 'Sheet1'!$D$3:$F$50),它就会成为您的原点(当 i=0 时引用的工作表)

于 2014-01-22T21:23:07.103 回答