Приложение определено или определено объектом ошибка 1004 и ошибка 438 при использовании формулы vlookup

Я пытаюсь использовать функцию vlookup для ряда ячеек, которая ищет значения на других листах. Однако я продолжаю получать ошибку времени выполнения, в которой говорится «ошибка, определенная приложением или определенным объектом».

ActiveSheet.Range("$A$1", Selection.End(xlDown)).RemoveDuplicates Columns:=1, _
    Header:=xlYes
'In Summary Tab
Range("A1").CurrentRegion.Select
nRows = Selection.Rows.Count

' Places column headers in "Summary" tab
For iCounter = 2 To Sheets.Count
    Sheets(iCounter).Select
    Range("A1").CurrentRegion.Select
    nCols = Selection.Columns.Count
         For iColumn = 2 To nCols
            Sheets(iCounter).Select
                If (WorksheetFunction.IsNumber(Cells(2, iColumn)) = "TRUE") Then
                Cells(1, iColumn).Select
                Selection.Copy
                Sheets("Summary").Select
                ActiveCell.Offset(0, 1).PasteSpecial
                Application.CutCopyMode = False
                ActiveCell.Offset(1, 0).Select
                ActiveCell.Resize(nRows - 1, 1).Select
                Selection.Formula = "=vlookup(B2," & _
                    Range(sheets(icounter).selection).Address","& icolumn",false)"
                End If
        Next
Next

Я также попытался отредактировать формулу vlookup для этого (со всем остальным так же):

                Selection = Application.WorksheetFunction.VLookup( _
                    "B2", Sheets(iCounter).CurrentRegion.Select, iColumn, False)

Но это дает ошибку 438 «объект не поддерживает это свойство или метод».

Даже попытался отредактировать vlookup на это, но снова получил ошибку 1004:

Selection = Application.WorksheetFunction.VLookup ("B2", Sheets (iCounter) .Range (Cells (1, 1), Cells (nCols, nRows)), iColumn, False)


person mike_326    schedule 20.12.2015    source источник


Ответы (2)


Похоже, вы пытаетесь вставить формулы в определенные диапазоны. Application.WorksheetFunction.VLookup не вставляет формулу, она используется для возврата значения вашей подфункции, как и обычная функция. Итак, ваш лучший пример - это правильный подход, если цель состоит в том, чтобы вставить кучу формул.

Причина, по которой вы видите ошибку в этой строке кода, заключается в том, что вы на самом деле не ссылаетесь на диапазон. Попробуйте вместо этого:

Selection.Formula = "=vlookup(B2," & Sheets(icounter).Name & "!" & _
                        Selection.Address & "," & icolumn & ",false)"

Обратите внимание, что этот код вызывает имя листа, добавляет восклицательный знак (!), а затем добавляет адрес выделенного фрагмента.

Вы также могли видеть ошибки из-за того, что в вашем коде отсутствовало несколько амперсандов (&).

Наконец, остерегайтесь использования .Select, .Selection и .Activate. У них есть свое место в VBA, но они доставят вам много головной боли. Для получения дополнительной информации о том, как избежать использования .Select, ознакомьтесь с этим ответом Криса Нилсена и этот ответ Сиддхарта Раута.

person ARich    schedule 20.12.2015
comment
Большое спасибо за ваше решение и объяснение, этот фрагмент кода сработал! - person mike_326; 21.12.2015

Попробуйте добавить:

On error resume next

Вверху вашего скрипта. Если vlookup не найдет совпадения, он вернет ошибку.

Если он возвращает ошибку, ваш скрипт останавливается.

Ваши текущие и последние предложения по сути совпадают с другим синтаксисом, но я не думаю, что это причина вашей проблемы. Попробуйте вместо этого ошибиться.

person logicOnAbstractions    schedule 20.12.2015
comment
Если OP намеревается вставить формулы в диапазон, использование Resume Next здесь на самом деле не решает проблему ... - person ARich; 20.12.2015