Функция сопоставления Excel VBA возвращает ошибку 2042

#excel #vba

Вопрос:

Я получаю ошибку 2042 в функции сопоставления для переменной findDeptrow в моей подпрограмме VBA. Безуспешно пытался изменить типы данных.

Спасибо за ответы!

Вот код:

 Sub calculatechange()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Integer
Dim findDeptrow As Variant
Dim findTypecol As Variant

Set ws1 = Workbooks("woorkbook.xlsm").Worksheets("works2")
Set ws2 = Workbooks("workbook.xlsm").Worksheets("works2")

Dim lastrow As Long
lastrow = ws2.Cells(Rows.Count, 1).End(xlUp).Row

ws1.Range("D3:H11").ClearContents

For i = 2 To lastrow
findDeptrow = Application.Match(ws2(i, 5), ws1.Columns(2), 0)
findTypecol = Application.Match(ws2.Cells(i, 13), ws1.Rows(2), 0)
ws1.Cells(CInt(findDeptrow), CInt(findTypecol)) = ws1.Cells(CInt(findDeptrow), CInt(findTypecol))   ws2.Cells(i, 14)
Next i

End Sub
 

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

1. Это означает, что значение не было найдено.

Ответ №1:

Возможно, это решит проблему:

 findDeptrow = Application.Match(ws2.Cells(i, 5).Value, ws1.Columns(2), 0)
findTypecol = Application.Match(ws2.Cells(i, 13).Value, ws1.Rows(2), 0)
 

Вам нужно передать значение в качестве первого аргумента: https://docs.microsoft.com/en-us/office/vba/api/excel.worksheetfunction.match

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

1. .Value неявно. Ее добавление полезно для наглядности, но не изменит результат.

2. По моему опыту, добавление. Значение часто решает проблемы. Я попробовал предоставленный код на своей машине, и он сработал. Конечно, без выборочных данных трудно сказать, решает ли это проблему в каждом конкретном случае.