У вас нет листа с именем "Sheet1".Либо:
- Этот код находится в стандартном модуле в книге с данными, и вы переименовали лист, либо
- Код находится в другой книге, и вы неправильно квалифицировал ваше свойство Worksheets
Я собираюсь предположить последнее.Когда вы используете свойства коллекции, такие как Worksheets или Cells, Excel делает предположения о том, кто является родителем.Неквалифицированный вызов Worksheets в стандартном модуле примет
ActiveWorkbook.Worksheets()
Неквалифицированный вызов Worksheets в модуле ThisWorkbook примет
ThisWorkbook.Worksheets()
Чтобы проверить, в чем проблема, добавьте эту строку в свойкод
Debug.Print Worksheets("Sheet1").Parent.Name
Он скажет вам, какая книга Excel используется, и может отличаться от того, что вы хотите.
Чтобы избежать неправильных предположений, лучше полностью квалифицировать ваши ссылки.Например, если вы открываете книгу с данными, это может выглядеть следующим образом:
Sub putquotes()
Dim wb As Workbook
Dim sym(1 To 162) As String
Dim i As Long
Set wb = Workbooks.Open("Path\Name")
For i = 1 To 162
sym(i) = wb.Sheets("Sheet1").Cells(i + 1, 1)
Next i
End Sub
Удержание этой ссылки в wb - простой способ определить ссылку.Если вы не открываете отдельный файл в коде, вы можете просто явно указать, как
ThisWorkbook.Worksheets("Sheet1")
ActiveWorkbook.Worksheets("Sheet1")
Workbooks("Mybook.xlsx").Worksheets("Sheet1")
Лучший способ чтения значений ячеек в массив выглядит так:
Sub putquotes()
Dim wb As Workbook
Dim sym As Variant
Dim i As Long
Set wb = Workbooks.Open("Path\Name")
sym = wb.Sheets("Sheet1").Range("A2").Resize(162, 1).Value
For i = LBound(sym, 1) To UBound(sym, 1)
Debug.Print "'" & sym(i, 1) & "'"
Next i
End Sub
Тодаст вам двумерный массив base-1, который вам может не понравиться, но это быстрее, чем читать их по одному за раз.