майкрософт эксель - vba

майкрософт эксель - vba

Я новичок в 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

вместо.

Связанный контент