2016-12-26 3 views
0

У меня есть книга, в которой у меня есть следующая формула в ячейке D3.Vba Vlookup с переменным именем листа

"= ВПР ($ С3 '[НОЧЬ ROTA.xlsx] ' $ $ 5: $ I $ 32, D $ 1,0)"

Источник Учебное пособие имеет 52 листов, и когда я хотите выполнить поиск на определенном листе, мне нужно вручную изменить имя листа, а затем запустить код ниже, чтобы скопировать его по ячейкам в моей книге с помощью изменения рабочего листа.

Есть ли способ, чтобы имя листа как переменная, которое я имел бы в ячейке в моей книге, или это было бы выбрано из раскрывающегося списка? Я знаю, что могу использовать 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

Это работает. Моя формула находится в другом учебнике, поэтому причина, по которой вы не хотите открывать другую книгу, если я использовал Indirect vlookup, ваш метод намного быстрее. Спасибо. – Sherbetdab

Смежные вопросы