не работает копи-паст(VBA)
От: fedomax  
Дата: 23.09.10 14:27
Оценка:
Доброго времени суток!

Помогите пожалуйста! Я новичок в 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


Вроде все описал понятно.
Re: не работает копи-паст(VBA)
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.09.10 16:32
Оценка:
Здравствуйте, 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

Скорее всего, сбивается первая коллекция. ЕМНИП, там нужно указывать просто имя файла, без пути.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: не работает копи-паст(VBA)
От: Аноним  
Дата: 24.09.10 11:00
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.