2017-01-16 8 views
0

Я очень новичок в vba, и я приношу свои извинения за ошибки (многие), которые я сделал в коде ниже. Я получаю сообщение об ошибке, когда устанавливаю переменные x и y, но также при попытке запустить комбинацию индексов и совпадений. Любая помощь приветствуется!Я пытаюсь использовать индекс и матч в VBA

Public Sub indexandmatch() 

Dim x As Range 
Dim y As Range 
Dim mycells As Range 
Dim p As Variant 

'workbooks(1) is the master workbook where I am trying to get the information from the other reports to be entered in to 

Application.Workbooks(1).Activate 

x = Application.Workbooks(2).Worksheets(1).Range("H:H") 
y = Application.Workbooks(2).Worksheets(1).Range("I:I") 

'range v is where I would like the values to be entered in the master 

For Each mycells In Range("V:V")  
    p = Application.WorksheetFunction.Index(x, Application.WorksheetFunction.Match(mycells.Offset(0, -11).Value, y), 0) 
    mycells = p.Value 
Next 

End Sub 
+3

Нужно использовать Set при назначении переменных объекта –

+0

«Я получаю сообщение об ошибке» - ничего не значит - вам нужно [изменить] свой вопрос, чтобы * включить конкретную ошибку, которую вы получаете *, и точно * где * в коде, который это происходит , –

ответ

1

вы должны Set любых переменный объект, а range из них являются

затем использовать Application объект функцию, Обертывание возможной ошибки как возвращаемое значение, так что вы можете проверить его с IsError() функции и перейти соответственно

, наконец, избегать Select/Activate образец и использование в полном объеме ссылки на источники

Public Sub indexandmatch() 
    Dim x As Range 
    Dim y As Range 
    Dim mycells As Range 
    Dim p As Variant 

    'workbooks(1) is the master workbook where I am trying to get the information from the other reports to be entered in to 

    Set x = Workbooks(2).Worksheets(1).Range("H:H") 
    Set y = Workbooks(2).Worksheets(1).Range("I:I") 

    'range v is where I would like the values to be entered in the master 

    For Each mycells In Workbooks(1).Worksheets("myMasterWorksheetName").Range("V:V") '<--| use fully qualified (up to worksheet and workbook) range reference. (change "myMasterWorksheetName" to you actual master workbook relevant worksheet name 
     p = Application.Match(mycells.Offset(0, -11).Value, y) 
     If Not IsError(p) Then 
      p = WorksheetFunction.Index(x, p, 0) 
      If Not IsError(p) Then mycells = p 
     End If 
    Next 
End Sub 
+0

Извинения, я должен был уточнить ошибку. Большое спасибо пользователю3598756. Я все еще получаю сообщение об ошибке, и я не слишком уверен, почему, когда я запускаю код, он возвращает ошибку «Run-time error 424»: object required и выделяет часть кода «mycells = p.value». Есть предположения? – Gandalfrandalf

+0

Извините, это была моя ошибка: слишком много было. .Value. см. отредактированный ответ. если он решает ваш вопрос, вы можете пометить его как принятый. Спасибо! – user3598756

+0

Нет сообщения об ошибке, и выполняется макрос, но по какой-либо причине в col V: V не возвращаются значения. Я проверил основные ошибки, например. написание имени листа, количество cols от mycells до значения lookup для соответствия, но все они выглядят нормально. Вы знаете, почему это может быть? – Gandalfrandalf