Ошибка кода VLookup в форме - Ошибка выполнения 1004 - PullRequest
0 голосов
/ 03 февраля 2019

Я начал изучать VBA и застрял на приведенном ниже коде.

Пожалуйста, помогите мне.

В основном я пытаюсь выполнить Vlookup данные с 1-го листа и 2-го листа и генерирую значение поиска на 3-м листе.

Лист 1

Лист 2

Лист 3

Sub Semi_Open()

Application.ScreenUpdating = False

'********************************************
'*** RESPONDENT WISE DATA PREPARATION ***
'********************************************

Sheets(1).Columns(1).Copy Destination:=Sheets(3).Columns(1)
Sheets(1).Rows(1).Copy Destination:=Sheets(3).Rows(1)

Sheets(3).Select
Cells(1, 1).Select

ActiveCell.SpecialCells(xlLastCell).Select
mrow = ActiveCell.Row
mcolumn = ActiveCell.Column

For j = 2 To mcolumn
For i = 2 To mrow
Cells(i, 2) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 2), Sheets(2).Range("A:MAA"), 2, False)
Next i
Next j


End Sub

1 Ответ

0 голосов
/ 03 февраля 2019

В вашем коде есть несколько вещей, о которых вы должны знать: 1) Вы отключаете обновление экрана, но никогда не включаете его снова.Я рекомендую оставить его включенным до тех пор, пока ваш код не заработает, чтобы вы могли видеть, что происходит.2) Лучше всего объявить ваши переменные.Mrow, Mcolumn, i и j должны быть объявлены как long.3) Старайтесь не использовать Select как можно больше.Вы становитесь зависимыми от своего местоположения курсора, и это обычно заканчивается неэффективной работой, поэтому вы получаете ошибку.Вы пытаетесь выбрать Cells(1,1), но не объявляете лист, из которого хотите выбрать.Предполагается, что вы хотите выбрать из Sheets(1), но вы не можете, потому что вы выбрали Sheets(3).4) Сделайте отступ в своем коде.Его легче читать и легче следовать за циклами и инструкциями if / then.

Перезапись существующего кода будет выглядеть следующим образом:

Sub Semi_Open()

    Dim mrow As Long
    Dim mcolumn As Long
    Dim j As Long
    Dim i As Long

    Sheets(1).Columns(1).Copy Destination:=Sheets(3).Columns(1)
    Sheets(1).Rows(1).Copy Destination:=Sheets(3).Rows(1)

    mrow = Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row
    mcolumn = Sheets(3).Cells(1, Columns.Count).End(xlToLeft).Column

    For j = 2 To mcolumn
        For i = 2 To mrow
            Sheets(3).Cells(i, 2) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 2), Sheets(2).Range("A:MAA"), 2, False)
        Next i
    Next j

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...