У меня есть код, который пытается выполнить индексирование и сопоставление. Я определил большинство значений диапазона как переменные, поэтому они могут быть динамическими c, поскольку я хочу использовать это с разными листами, которые различаются по размеру столбца и строки.
Индекс и соответствие используются диапазоны из другого книга, определенная как "y" в моем коде. Я все время получаю сообщение об ошибке во время выполнения:
Run-time error ‘1004’:
Application-defined or object-defined error
Код, который у меня сейчас есть:
Private Sub IndexandMatch()
Dim yChanges As Worksheet, OperatorWs As Worksheet
Dim yChangesLastRow As Long, Parameters As Long, x As Long, z As Long
Set y = Workbooks.Open(Filename:="\Databases\Database_IRR 200-2S.xlsm", Password:="123")
Set yChanges = y.Sheets("Changes")
Set OperatorWs = ThisWorkbook.Worksheets("Operator")
Parameters = yChanges.Range("F1:CL1").Columns.Count 'Last Column in Changes Sheet
yChangesLastRow = yChanges.Range("A" & Rows.Count).End(xlUp).Row ' Last row in Changes Sheet
yChangesLastRow = yChangesLastRow - 2
z = 6
For x = 31 To Parameters
'On Error Resume Next
OperatorWs.Range("U" & x).Value = Application.WorksheetFunction.Index( _
yChanges.Range(Cells(3, z).Address(), Cells(yChangesLastRow, z).Address()), _
Application.WorksheetFunction.Match(Sheet3.Range("H5").Value, yChanges.Range("A3:A" & yChangesLastRow), 0))
z = z + 1
Next x
End Sub
РЕШЕНИЕ (Спасибо BigBen за предоставленную мне информацию)
Вот код:
Private Sub IndexandMatch()
Dim yChanges As Worksheet, OperatorWs As Worksheet
Dim yChangesLastRow As Long, Parameters As Long, x As Long, z As Long
Set y = Workbooks.Open(Filename:="\Databases\Database_IRR 200-2S.xlsm", Password:="123")
Set yChanges = y.Sheets("Changes")
Set OperatorWs = ThisWorkbook.Worksheets("Operator")
Parameters = yChanges.Range("F1:CL1").Columns.Count 'Last Column in Changes Sheet
yChangesLastRow = yChanges.Range("A" & Rows.Count).End(xlUp).Row ' Last row in Changes Sheet
yChangesLastRow = yChangesLastRow - 2
z = 6
For x = 31 To Parameters
With yChanges
Dim IndexRng As Range
Set IndexRng = .Range(.Cells(3, z), .Cells(yChangesLastRow, z))
Dim MatchRng As Range
Set MatchRng = .Range("A3:A" & yChangesLastRow)
End With
Dim matchNum As Variant
matchNum = Application.Match(Sheet3.Range("H5").Value, MatchRng, 0)
If Not IsError(matchNum) Then
OperatorWs.Range("U" & x).Value = Application.Index(IndexRng, matchNum)
Else
Exit Sub
End If
z = z + 1
Next x
End Sub