Ваша формула VLOOKUP:
VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
кажется недействительным.
Диапазон Worksheets("Book List").Cells("B4:C24")
содержит 2 столбца, но ваш третий аргумент - 6
. Другими словами, вы пытаетесь получить 6-й столбец диапазона из 2-х столбцов (которого, очевидно, не существует). Так что в данный момент он, вероятно, возвращает ошибку #REF
.
Дополнительная информация по VLOOKUP
при необходимости: https://support.office.com/en-us/article/vlookup-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1
Исправьте формулу VLOOKUP
так, чтобы вы передавали столбец, который по крайней мере существует в диапазоне, который вы передаете в качестве второго аргумента.
Кроме того, я рекомендую объявить эти переменные как тип Long
(чтобы предотвратить ошибки переполнения типа):
Dim nextRefRec As Integer
Dim i As Integer
Dim ListNo As Integer
и изменение этой строки:
Cells(nextRefRec, 7).Value = Application.WorksheetFunction.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
к этому (кроме как также исправить ваши VLOOKUP
аргументы, как упомянуто выше):
Cells(nextRefRec, 7).Value = Application.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
, так что если VLOOKUP
вернет #N/A
или какую-либо другую ошибку, значение ошибки может быть записано в ячейку вместо прерывания вашего макроса.
Ваш код неявно ссылается на любой лист, который оказывается активным во время выполнения кода. Попробуйте сослаться на родительскую рабочую книгу и рабочую таблицу (в случае, если активная таблица не та, которую вы думаете).