2013-11-19 3 views
0

Я пытаюсь использовать vlookup в VBA.Ссылка VBA на таблицу в другом листе

  1. Имя файла = Application.GetOpenFilename (FileFilter: = "Excel Files (* .xls), * .xls", Title: = "Пожалуйста, выберите файл")
  2. Table1 = Sheet1.Range ("A3 : A7000") 'SiteID
  3. table2 = [имя файла] Sheet1.Range ("A3: I13")
  4. Roww = Sheet1.Range ("Е2".) строка
  5. Coll = Sheet1.Range ("Е2 "). Колонна
  6. Для каждого cl В таблице 1
  7. Sheet1.Cells (Roww, Coll) = Ap plication.WorksheetFunction.VLookup (сло, Table2, 1, False)
  8. Roww = Roww +1
  9. Следующие кл

Моим вопрос, как я могу определить таблицу, расположенную в другом рабочем листе/файл в строке 3?

+0

'Workbooks («Имя файла»). Листы («Листовое имя»). Диапазон («Диапазон») ', заполнение для ваших соответствующих wb, ws и range должно делать трюк. –

ответ

1

Вы можете установить рабочую книгу таблицу и диапазон для объектов в VBA и обращаться к ним по имени ..

пример:

Sub test() 

Dim filename As String 
Dim fullRangeString As String 

Dim returnValue As Variant 
Dim wb As Workbook 
Dim ws As Worksheet 

Dim rng As Range 

    'get workbook path 
    filename = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file") 


    'set our workbook and open it 
    Set wb = Application.Workbooks.Open(filename) 

    'set our worksheet 
    Set ws = wb.Worksheets("Sheet1") 

    'set the range for vlookup 
    Set rng = ws.Range("A3:I13") 


    'Do what you need to here with the range (will get error (unable to get vlookup property of worksheet) if value doesn't exist 
    returnValue = Application.WorksheetFunction.VLookup("test4", rng, 2, False) 


    MsgBox returnValue 
    'If you need a fully declared range string for use in a vlookup formula, then 
    'you'll need something like this (this won't work if there is any spaces or special 
    'charactors in the sheet name 



    'fullRangeString = "[" & rng.Parent.Parent.Name & "]" _ 
         & rng.Parent.Name & "!" & rng.Address 

    'Sheet1.Cells(10, 10).Formula = "=VLOOKUP(A1," & fullRangeString & ",8,False)" 




    'close workbook if you need to 
    wb.Close False 


End Sub 
+0

thanx много для ответа, попробовал ваше предложение, используя его с линией Sheet1.Cells (X, Y) .FormulaR1C1 = "= VLOOKUP (RC [-4], rng, 10, False)". Macro выполняется без ошибок, однако при проверке ячейки X, Y я вижу «= VLOOKUP (A3, rng, 10, FALSE)» в содержимом, а оболочка показывает #NAME ?. Вы знаете, в чем проблема? – taiko

+0

Я имел в виду, не должен ли я видеть реальный диапазон вместо переменной rng в формуле? – taiko

+0

@taiko, если вы используете такую ​​строку диапазона (а не так, как вы впервые попросили «Application.WorksheetFunction.VLookup» («тогда вам понадобится строка, похожая на« fullRangeString »(см. Мое редактирование). вероятно, не удастся, если у вас есть пробелы в имени ваших рабочих таблиц (так как они должны включать в себя «для правильной работы диапазона в этом случае») – Sam

1

Это должно работать:

Sub vLook() 

Dim wb1 As Workbook 
Dim wb2 As Workbook 
Dim Range1, myValue 
Set wb1 = ThisWorkbook 
Set wb2 = Workbooks.Open("C:\Code\Book4.xlsx") 

Range1 = wb2.Sheets(1).Range("A1:C5") 
myValue = Application.WorksheetFunction.VLookup("Test", Range1, 2, False) 

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