Доброго времени суток!
Помогите пожалуйста! Я новичок в VB и у меня не работает код. Пишет ошибку №9(Subscript out of range). не могу понять как исправить.
Application.DisplayAlerts = False
Application.Workbooks.Open (path)
Application.ActiveWorkbooks(path).Sheets(1).Range("A1:H147").Copy 'пишет, что здесь ошибка
Application.Workbooks(ipath).Sheets(strNameSh).Range("A1:H147").Paste
Application.ActiveWorkbooks(path).Close
ipath(путь книги куда нужно копировать) задается во время определения формы
то есть по моим соображениям ipath будет создаваться тогда,когда будет открываться книга
Sub UserForm_Initialize()
ipath = ActiveWorkbook.path + "\Gisto.xlsm"
path(путь книги с которой нужно скопировать первый лист) задается так:
MsgBox "в указаном листе должен быть один лист"
Set fd = Application.FileDialog(3)
With fd
.AllowMultiSelect = False
.Show
' Отображает путь
If .SelectedItems.Count > 0 Then
Me.TextBox1.Value = .SelectedItems(1) 'записывает текст в строку
Else
Exit Sub
End If
End With
path = fd.SelectedItems(1) ' глобальной переменной присваивает путь
End Sub
Вроде все описал понятно.
Здравствуйте, fedomax, Вы писали:
F>Я новичок в VB и у меня не работает код. Пишет ошибку №9(Subscript out of range). не могу понять как исправить.
F>Application.DisplayAlerts = False
F> Application.Workbooks.Open (path)
F> Application.ActiveWorkbooks(path).Sheets(1).Range("A1:H147").Copy 'пишет, что здесь ошибка
F> Application.Workbooks(ipath).Sheets(strNameSh).Range("A1:H147").Paste
F> Application.ActiveWorkbooks(path).Close
"Subscript out of range" означает, что ты обращаешься к несуществующему элементу коллекции или массиву. Какая коллекция или массив отвергает — это можно определить, упростив выражения в строке. И действовать по обстоятельствам.
Set a = Application.ActiveWorkbooks(path)
Set b = a.Sheets(1)
Set c = b.Range("A1:H147")
c.Copy
With Application.ActiveWorkbooks(path)
With .Sheets(1)
With .Range("A1:H147")
.Copy
End With
End With
End With
Скорее всего, сбивается первая коллекция. ЕМНИП, там нужно указывать просто имя файла, без пути.
Здравствуйте, Vi2, Вы писали:
Vi2>"Subscript out of range" означает, что ты обращаешься к несуществующему элементу коллекции или массиву. Какая коллекция или массив отвергает — это можно определить, упростив выражения в строке. И действовать по обстоятельствам.
Vi2>Vi2>Set a = Application.ActiveWorkbooks(path)
Vi2>Set b = a.Sheets(1)
Vi2>Set c = b.Range("A1:H147")
Vi2>c.Copy
Vi2>
Vi2>Vi2>With Application.ActiveWorkbooks(path)
Vi2> With .Sheets(1)
Vi2> With .Range("A1:H147")
Vi2> .Copy
Vi2> End With
Vi2> End With
Vi2>End With
Vi2>
Vi2>Скорее всего, сбивается первая коллекция. ЕМНИП, там нужно указывать просто имя файла, без пути.
Спасибо. Range не имеет свойства Paste, а только PasteSpecial.