полный обзор еженедельных отчетов - PullRequest
0 голосов
/ 01 ноября 2018

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

Sub VlookOne()
Dim filenm As Variant
Dim MyBook1 As Workbook
Dim MyBook2 As Workbook
Dim myTableArray
Dim rowcnt
Dim beginrow
Dim lastrow

beginrow = 4
lastrow = 200
Set MyBook1 = ThisWorkbook
filenm = Application.GetOpenFilename
'the workbook im trying to run the vlookup against
Set MyBook2 = Workbooks.Open(filenm)
    With MyBook2
        Set myTableArray = MyBook2.Worksheets("Sheet1").Range("A4:M300")
    End With

    For rowcnt = beginrow To lastrow
    MyBook1.Activate
    Range("M4").Select
    ActiveCell.Value = Application.VLookup(Range("A4"), myTableArray, 13, False)
    ActiveCell.Offset(1, 0).Select
    Next rowcnt

End Sub

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы должны полностью квалифицировать ссылки на диапазон, чтобы избежать неявных ссылок на активные таблицы. Удалите ActiveCell и .Select / .Activate строки, поскольку они увеличивают накладные расходы и замедляют ваш код. Используйте переменную строки, чтобы ссылаться на текущую строку в цикле и избегать перезаписи, как в данный момент:

With MyBook1.Worksheets("Sheet1")            '<==change as required   
    For rowcnt = beginrow To lastRow  
        .Cells(RowCount, "M") = Application.VLookup(.Cells(RowCount, "A"), myTableArray, 13, False)   
    Next rowcnt   
End With

Вы также можете добавить обработку ошибок, если совпадение LookUp не найдено.

0 голосов
/ 01 ноября 2018

Чтобы исправить проблему повторения значения, измените строку

ActiveCell.Value = Application.VLookup(Range("A4"), myTableArray, 13, False)

до

ActiveCell.Value = Application.VLookup(Range("A" & rowcnt), myTableArray, 13, False)

Это должно указывать VLOOKUP использовать значение из активной строки вместо постоянного поиска значения в ячейке 'A4'.

...