#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. По моему опыту, добавление. Значение часто решает проблемы. Я попробовал предоставленный код на своей машине, и он сработал. Конечно, без выборочных данных трудно сказать, решает ли это проблему в каждом конкретном случае.