2017-01-17 7 views
1

Попытка сделать макрос, который будет принимать ввод (13-разрядное число) из ячеек A7, A8, A9 и т. Д., Пока не будет достигнута пустая ячейка, и запустите vlookup с этим против другой книги.VLookup В другой рабочей книге

Однако, я просто получаю ошибку # N/A, и я не могу понять почему.

Мой текущий код:

Sub getData() 

Application.EnableEvents = False 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.Calculation = xlManual 

Dim wb As Workbook, src As Workbook 
Dim srcRange As Range 
Dim InputString 
Dim OutputString 
Dim i As Long 

Set wb = ActiveWorkbook 
Set src = Workbooks.Open("D:\Files\test1.csv", True, True) 
Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown) 

i = 7 

Do While wb.ActiveSheet.Cells(i, 1) <> "" 

    InputString = wb.Worksheets("Sheet 1").Cells(i, 1) 

    OutputString = Application.VLookup(InputString, srcRange, 3, False) 

    wb.Worksheets("Sheet 1").Cells(i, 2) = OutputString 

    i = i + 1 

Loop 


src.Close (False) 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Application.Calculation = xlAutomatic 

End Sub 

Я думаю, что стоит отметить, что ссылка, которую я смотрю вверх («InputString») определяется как пользовательский формат # 0 в файле «Src». Я действительно не знаю, слишком ли это имеет значение, оно все равно должно быть целым?

Кроме того, «OutputString» может быть либо цифрами, либо текстом, поэтому я целенаправленно разрешаю ему неопределенное. Я попытался определить его как «Вариант», «Строка» и «Целое», но это ничего не изменило.

Спасибо.

+0

Ваш 'VLookup' пытается получить доступ к столбцу 3 диапазона, который вы установили, чтобы быть только одной шириной столбца. Возможно, измените '' A1: A8 "' на '' A1: C8 "'? – YowE3K

+0

@ YowE3K - извините, это была ошибка с моей стороны при использовании моей тестовой таблицы. Я отредактировал, чтобы исправить. Теперь он устанавливает начальный диапазон как верхний ряд. –

+0

(a) Я предполагаю, что вы проверили, что ячейки в столбце A активного листа не являются пробелами, по крайней мере, для диапазона, который вы пытаетесь обработать на листе «Лист 1». (Например, если активный лист не имеет ничего в ячейке A7, цикл не будет обрабатывать все, что было в ячейке A7 «Лист 1», что может оставить «# N/A» в ячейке B7 «Лист 1», из какого-то предыдущего запуска макроса.) (б) Прошли ли вы через код, чтобы узнать, что задано значение 'InputString'? (c) Вы проверили, что файл csv содержит значения, которые вы ищете? – YowE3K

ответ

1

Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown)

Это поможет вам диапазон одной ячейки на колонке A, т.е. A20. Выполнение VLookup в одной ячейке бессмысленно.

То, что вы, вероятно, имел в виду следующее:

With Sheets(1) 
    Set srcRange = .Range("A1:H" & .Range("A1").End(xlDown).Row) 
End With 

Это будет установлено нечто вроде A1:H20.

+1

Спасибо! Это именно то, что мне нужно. Я как-то понял, что что-то не так с тем, где я искал (получение # N/A, кроме ошибки), но не знал, как правильно выбрать диапазон. –

+0

@WillC приветствуется :) –

1

Сначала вы должны изменить диапазон src, который на самом деле установлен для захвата только нижней строки, а не диапазона сверху вниз. Попробуйте

Set wb = ActiveWorkbook 
Set src = Workbooks.Open(""D:\Files\test1.csv", True, True) 
With src.Sheets(1) 
    Set srcRange = .Range(.Range("A1"), .Range("H1").End(xlDown)) 
End With 

Во-вторых, я не верю, что CSV-файл будет поддерживать 13-значное число, кроме как текст. VLOOKUP очень чувствителен к текстовым и общим номерам, поэтому, если новый диапазон src не помогает, попробуйте сначала преобразовать входную строку с помощью CStr().

Удачи вам!

+0

Спасибо, это правильно. Я как-то выяснил, что проблема связана с моим диапазоном, потому что это было # N/A, а не фактическая ошибка VBA, но не знала, как правильно выбрать диапазон. Я знаю все о vlookup и переменных типах ... Вот почему я изначально думал, что это связано с этим. Я надеюсь, что использование String будет работать. –

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