Прежде всего, обратите внимание, что если вы объявляете
Dim i, j, k, numRows As Integer
только numRows
, это Integer
, но все остальные имеют тип Variant
. Это то же самое, что и запись:
Dim i As Variant, j As Variant, k As Variant, numRows As Integer
В VBA необходимо указать тип для каждой переменной. Кроме того, в Excel больше строк, чем умещается в Integer
, поэтому вы должны использовать Long
. Также нет смысла использовать Integer
в VBA , поэтому я рекомендую всегда использовать Long
вместо этого:
Dim i As Long, j As Long, k As Long, numRows As Long
То же самое относится и к другим множественным переменным, объявленным в одной строке.
Другая рекомендация - избегать ActiveWorkbook
и ActiveSheet
, если это возможно. Обратите внимание, что ActiveWorkbook
- это книга, которая имеет фокус / находится сверху. Это может легко измениться одним кликом пользователя. Вероятно, вы хотели использовать ThisWorkbook
- рабочую книгу, в которой написан этот код VBA (и он никогда не изменяется).
Вместо ActiveSheet.Cells
явно укажите worbkook и рабочую таблицу для вашего объекта Cells
, Например, studentSheet.Cells
или что-то подобное.
К вашей актуальной проблеме
Обратите внимание, что файл studentCode & ".xlsx
должен быть открыт, если вы хотите использовать его в формуле.
Убедитесь, что вы открыли его с помощью
Dim wb As Workbook
Set wb = Workbooks.Open("\\server\# FLTLOG_EXPORT\" & studentCode & ".xlsx"
Тогда вы можете использовать его в своей формуле без пути:
lastFlight = "=MAIOR('[" & studentCode & ".xlsx]Status'!$A$3:$A$219;1)"