2013-05-22 13 views
0

Код VBA, приведенный ниже, должен: 1) выбирать диапазон ячеек в другом файле; 2) вставлять новый столбец в активный файл; 3) когда он проходит через каждую строку в столбце C, он просматривает соответствующий значение в диапазоне ячеек в другом файле из # 1 4) вводит значение в столбце рядом с тем, которое оно ищет.Мой код vba не работает. Подстрочный код

Однако он просто не работает, и я не уверен, что не так. новичок в этом .. Пожалуйста, помогите.

Sub Translate() 
Dim PartName As String 
Dim CellName As String 
Dim PartNameList As Range 
Dim i As Integer 

Set PartNameList = Workbooks("C:\Users\" "\Desktop\Part name translation.xlsx").Worksheets("Reference").Range("A1:B2000") 

Worksheets("Initial").Columns("D").Insert 
For i = 2 To Range("C2:C3000").Count 
    If IsEmpty("C" & i) = True Then Exit For 
    PartName = WorksheetFunction.VLookup(Range("C" & i), PartNameList, 2, False) 
    Range("C" & i).Value = PartName 
Next i 

End Sub 
+1

Какую линию это неудача на? Я бы предположил (без запуска), что это строка «Set PartNameList =». Я думаю, вам следует использовать только название книги, которая отображается в строке заголовка Excel при выборе этой книги. – steveo40

+1

Не можете ли вы просто использовать функцию vlookup из Excel и заполнить? Вот и все, что делает этот код. –

ответ

1

Вы не передавать действительное имя книги:

Set PartNameList = Workbooks(_ 
    "C:\Users\" "\Desktop\Part name translation.xlsx"). _ 
    Worksheets("Reference").Range("A1:B2000") 

Это кажется вам не хватает переменной среды, это должно исправить:

dim uName as String: uName = Environ("Username") 
Set PartNameList = Workbooks(_ 
    "C:\Users\" & uName & "\Desktop\Part name translation.xlsx"). _ 
    Worksheets("Reference").Range("A1:B2000") 

Но, если учебное пособие уже открыт, вам не нужно полностью его квалифицировать, вы можете просто использовать имя файла:

Set PartNameList = _ 
    Workbooks("Part name Translation.xlsx").Worksheets("Reference").Range("A1:B2000") 

И, наконец, если рабочая книга не открыта, я думаю, вам нужно будет открыть его, во-первых:

dim uName as String: uName = Environ("Username") 
dim wbPartName as Workbook 
Set wbPartName = Workbooks.Open(_ 
    "C:\Users\" & uName & "\Desktop\Part name translation.xlsx") 
Set partNameList = wbPartName.Worksheets("Reference").Range("A1:B2000") 
+0

Спасибо, Дэвид. Тем не менее, я получаю сообщение об ошибке «Невозможно получить свойство Vlookup класса рабочей таблицы» в «PartName = WorksheetFunction.VLookup (Range (« C »и i), PartNameList, 2, False)« – user1426857

+0

Добро пожаловать, подумайте о том, чтобы обозначить этот ответ как «принятый», чтобы другие могли извлечь из этого выгоду. Следующее должно быть новым вопросом, но, вероятно, виновником является то, что вы не полностью определили «Range (« C »и i)», что другая рабочая книга «Active» во время выполнения и т. Д. –

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