2015-09-22 2 views
0

Я запускаю простой VLOOKUP, используя 2 книги. Это традиционно делается вручную, но теперь мне нужно автоматизировать процесс каждый месяц:vlookup с шаблоном в файл excel

Я обычно использую что-то вроде,

= ВПР (D1, «[PD1_Book1_15-09-22.xls] Live»! $ A: $ A, 1,0) .. в текущей книге под названием NW 01-09, имя рабочего листа «Мастер», ячейка F1. Затем я копирую всю функцию по столбцу. Конечным результатом является много # N/A, которые я отфильтровываю немедленно.

Проблема заключается в эти книги регулярно меняют свое название (например .. «PD * Книга1- - .xls, в этом случае„Книга1“является постоянным и NW ** -, в этом случае NW постоянен)

Так с «Live» лист активный на «PD _Book1_ .xls» Я попытался это, но не могу заставить его работать.

Sub Lookup() 
myFileName = ActiveWorkbook.Name 
mySheetName = ActiveSheet.Name 
myRangeName = Range("A:A") 

Dim wb As Workbook 
For Each wb In Workbooks 
If wb.Name Like "NW*.*" Then 
wb.Activate 
Exit Sub 
End If 
Next 

Range("F1").Formula = "=VLOOKUP(A1,[" & myFileName & "]" & mySheetName & "!" & myRangeName & ",1,0)" 

End Sub 

Я полностью потерянный на этом, любая помощь было бы замечательно. Если я не могу заставить его работать на 1 ячейку, я не знаю, как заполнить все из них!

Рабочая тетрадь NW всегда будет открыта, так как она подвержена нагрузке очистки данных с помощью макроса, прежде чем мы дойдем до этой точки. Я рад за PD * Book1 **. Xls теперь можно открыть, если это проще. Данные для поиска находятся на листе «Live»

Я новичок в vba, и думаю, что я откусил больше, чем могу пережевывать. Заранее спасибо.

ответ

0

Попробуйте это:

Sub wcard() 

Dim k As Workbook 'looper 
Dim wbs As Workbook 'source of the data 
Dim wbt As Workbook 'target of the data 
Dim ws As Worksheet 'source of the data 
Dim wt As Worksheet 'target of the data 
Dim i As Long 'just a counter 
Dim lrow As Long 'variable for the lastrow formula 
Dim wnm As String 'helps with the formula 


For Each k In Workbooks 'loop through the open workbooks and 
'assign the source and target variables to the correct workbooks 

    If k.Name Like "NW*.*" Then 

     Set wbt = k 

    Else 

     If k.Name Like "PD*Book1*.*" Then 

      Set wbs = k 
     End If 

    End If 

Next k 'end of our loop 

Set ws = wbs.Sheets("Live") 'assign sheets 
Set wt = wbt.Sheets("Master") 'assign sheets 

wnm = wbs.Name 


lrow = wt.Range("A" & Rows.Count).End(xlUp).Row 
'find the last rows in your master file that has entries 
'(substitute "A" for the column by which you would determine that) 

For i = 1 To lrow Step 1 'loop through the rows of your master to put the 
'formula in each of them 

    wt.Range("F" & i).Formula = "=VLOOKUP(A" & i & ",[" & wnm & "]Live'!$A:$A,1,0)" 
    ' your formula - note that your sheet name and the range for the lookup do not change 
    'depending on the workbook, so no need to put them as variables 

Next i 

End Sub 
+0

Wow! Я могу следовать за ним. Просто. Я получаю переменную объекта runtime 91 не установленную ошибку на «wbt = k». Я просмотрел файл справки, но я не понимаю. – Gabbana

+0

@Gabbana Извините, забыли поставить 'set' - может плохо, оригинальное сообщение отредактировано и исправлено –

+0

Не стоит беспокоиться. Я справился. Отлично! – Gabbana