Vba Vlookup与可变的sheetname

时间:2016-12-26 20:54:36

标签: excel vba variables vlookup

我有一个工作簿,我在单元格D3中有以下公式。

“= VLOOKUP($ C3,'[NIGHT ROTA.xlsx] 15 '!$ A $ 5:$ I $ 32,D $ 1,0)”

源工作簿有52张,当我想搜索某张工作表时,我必须手动更改工作表名称,然后运行下面的代码,使用工作表更改将其复制到工作簿中的单元格中。

有没有办法让sheetname作为我在工作簿中的单元格中具有的变量,或者是从下拉列表中选择的?我知道我可以使用INDIRECT但不想打开源工作簿。

Sub WeekChange()
Range("D3").Select
Selection.Copy
Range("D3:I26").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
End Sub

1 个答案:

答案 0 :(得分:1)

您可以将工作表名称放在一个下拉单元格中,例如E1(或任何您选择的)并捕获此单元格中的更改:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("E1").Address Then
        Range("D3:I26").Formula = "=VLOOKUP($C3,'[NIGHT ROTA.xlsx]" & Target.Value & "'!$A$5:$I$32,D$1,0)"
    End If
End Sub

要填充E1中的下拉框,您最终可以在工作簿打开时设置它,但由于您不想打开它(我猜您有一些原因),您可能需要手动填充E1的验证。