
Я новичок в VBA и пытался написать код для поиска 5 имен (на листе 2), на листе 1, где имен мало, используя For Loop
.
Но при запуске этого кода возникает ошибка,
переменная объекта или с неустановленной переменной блока
Как от этого избавиться?
Sub find()
Sheets("sheet2").Activate
For x = 1 To 5
Cells(x, 1).Select
var1 = Selection.Copy
Sheets("sheet1").Activate
Dim search As Range
Set search = range("a1:f9").find(var1).Activate
Next
End Sub
решение1
Вы можете использовать этот модифицированный код VBA, который поможет вам сопоставить и вернуть имена между двумя листами.
Перед запуском макроса:
Sub QuickSearch()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
Set rng1 = ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet10!C[-1]:C,1,FALSE),"""")"
.Value = .Value
End With
End Sub
- Вы можете ввести этот код в любой из таблиц в качестве стандартного модуля.
После запуска макроса:
Примечание.
ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
- В этой строке кода
[a2]
(ссылка на ячейку) и"A"
(имя столбца) можно редактировать.
решение2
Selection.Copy
являетсяобъект, поэтому команда
var1 = Selection.Copy
выдает вашу ошибку - это должно быть
Set var1 = Selection.Copy
Но это не то, чего ты хотел — ты хотелсодержимое (текст) выделения в вашей переменнойvar1
.
Так что используйте
var1 = Selection.Text
вместо.