Индекс/Соответствие VBA с нескольких листов

#excel #vba

Вопрос:

Ранее я спрашивал о том, как найти данные в столбце, сопоставить их с листом. Затем сопоставьте строки из столбца со строками с этого листа и скопируйте их. Было предложено использовать Индекс/Соответствие, что было очень полезно, но я застрял. Я смог заставить его делать то, что я хотел, если все было на одной странице, но не тогда, когда они находятся на разных листах.

Мой первый лист «Обзор»

У каждого ECU 1-3 есть такой лист: «2»

Я хочу найти правильный лист и ввести данные в правильную колонку «Транспортные средства». Я делаю это шаг за шагом, но, похоже, не могу пройти мимо жесткого кодирования, чтобы это сработало.

     Sub Trial_Script()

Dim main_ws As Worksheet, veh_ws As Worksheet
Dim Veh_IDs As Range, Veh_ID As Range

Dim a As Variant
Dim j As Long


Set main_ws = Sheets("Overview")
Set Veh_IDs = main_ws.Range(Cells(2, 2), Cells(2, 4))

For Each veh_ws In Sheets
    For Each Veh_ID In Veh_IDs.Cells
        If veh_ws.Name = Veh_ID Then
             a = Veh_ID
             
            For j = 4 To 7
                main_ws.Cells(j, 2).Value = Worksheets(veh_ws).WorksheetFunction.Index(Range("H4:H7"), Application.Match((Worksheets(main_ws).Cells(j, 1).Value), Worksheets(veh_ws).Range("G4:G7"), 0))
                On Error Resume Next
            Next j
                                
        End If
    Next Veh_ID
Next veh_ws

End Sub
 

Комментарии:

1. Трудно понять структуру ваших данных только по этим картинкам. Поделитесь новыми фотографиями, на которых у вас есть данные с заголовками, и покажите практический пример.

2. Worksheets(veh_ws).WorksheetFunction WorksheetFunction это свойство Application , а не рабочего листа.

3. Каждый раз, когда вы используете Range или Cells он должен быть указан с явным рабочим листом.