- Может быть Ваш код ищет другую книгу?Попробуйте
ThisWorkbook.Sheets
- Добавить
Option Explicit
для принудительного объявления переменных (хотя это не является источником вашей проблемы) - Последнее, передача значения должна быть
Range.Value = Range.Value
Единственная другая ошибка, которую я вижу, это то, что имена ваших листов не являются точными совпадениями.Я запустил этот код без проблем (и ваш).Если у вашего фактического имени листа есть пробел или какой-то другой символ, который на первый взгляд неочевиден, это даст вам Subscript Out of Range
, поскольку это должно быть точное соответствие.
Sub Skills()
Dim j As Long, i As Long
j = 18
For i = 3 To 47
If ThisWorkbook.Sheets("Skills").Range("E" & i) > 0 Then
ThisWorkbook.Sheets("MainPage").Range("B" & j).Value = ThisWorkbook.Sheets("Skills").Range("E" & i).Value
j = j + 1
End If
Next
End Sub
Вы можете использовать это, чтобы проверить, что имена ваших листов найдены.Если любая из этих строк выдает ошибку our, это означает, что VBA не может найти лист в вашей книге.
Sub Test()
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Skills")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("MainPage")
End Sub