2016-12-26 46 views
0

我有一個工作簿,其中單元格D3中具有以下公式。VBA Vlookup與可變圖紙名稱

「= VLOOKUP($ C3, '[NIGHT ROTA.xlsx] ' $ 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

你可以把工作表名稱在一個下拉細胞,說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的驗證。

+0

我試過這個,並得到運行時錯誤5 – Sherbetdab

+0

@Sherbetdab對不起,有一個錯字。請嘗試編輯的代碼。 –

+0

這是一種享受。我的公式存在於不同的工作簿中,因此如果我使用間接查找,不想打開其他工作簿,那麼您的方法要快得多。謝謝。 – Sherbetdab