Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 12:07   #1
never_mind
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 12
По умолчанию Помогите перевести на VBA

Люди, help me, жалкому юзеру :-)

У меня стоит задача:
есть рабочий файл Excel, в него - нужно из другого файла Excel на диске, уже с известным именем, с копировать со вкладки с известным заранее именем, некий диапазон данных.
ВОПРОС:
Какой командой (функцией) можно обратиться к стороннему файлу (по адресу) к нужной вкладке к нужному диапазону данных? Т.е. как будет выглядеть команда копирования из одного файла - в другой?
never_mind вне форума
Старый 04.02.2009, 12:26   #2
Rom1k06
Форумчанин
 
Регистрация: 30.07.2008
Сообщений: 125
По умолчанию

Set Wb = Application.Workbooks.Open("Путь к файлу") - открыть указанный файл
Workbooks(Wb).Worksheet("Имя листа").Range("Диапозон").Copy - копировать диапозон из открытого файла
ThisWorkbook.Sheets(1).Range("A1"). Paste вставляет в твою книгу первый лист
Rom1k06 вне форума
Старый 04.02.2009, 12:28   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

1) Укажите полный путь (это типа C:\Documents and Settings\Игорь\Рабочий стол\договор.xls) для обоих файлов
2) укажите, какой диапазон (например, E4:G66) с какого листа (надо знать имя листа, например, Лист1) надо копировать.
3) то же самое для диапазона, в который надо произвести вставку.

Так же надо знать, на момент копирования будет открыта только одна книга, или обе.

Можно и без копирования - вставить связь с другой книгой.
EducatedFool вне форума
Старый 04.02.2009, 12:35   #4
never_mind
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Можно и без копирования - вставить связь с другой книгой.
А подскажите, пожалуйста, как без копирования?
never_mind вне форума
Старый 04.02.2009, 12:37   #5
never_mind
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Rom1k06 Посмотреть сообщение
ThisWorkbook.Sheets(1).Range("A1"). Paste вставляет в твою книгу первый лист
У меня несколько файлов в обработке и все копирование загнанно в цикл. Если файлы будут перебираться, то при копировании в ячейку А1 ранее скопированные данные будут теряться да?
never_mind вне форума
Старый 04.02.2009, 12:40   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
как без копирования?
Ответ можно поискать здесь

Цитата:
У меня несколько файлов в обработке и все копирование загнанно в цикл.
Приведите здесь весь свой код.
Так будет намного проще.

Цитата:
Если файлы будут перебираться, то при копировании в ячейку А1 ранее скопированные данные будут теряться да?
Так зачем же копировать данные с разных книг в одну и ту же ячейку?
Неужто ячеек недостаточно?

Последний раз редактировалось EducatedFool; 04.02.2009 в 12:42.
EducatedFool вне форума
Старый 04.02.2009, 12:49   #7
never_mind
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 12
По умолчанию

Помогите Пожалуйста! Зашиваюсь нимагу(
и с поиском у меня отношения не сложились. если бы я могла самостоятельно разобрать чужой код, я бы о помощи не просила)

Вы не могли бы посмотреть, то что у меня получилось и помочь продолжить? ибо в одиночку получается ну ооочень медленно.

Задача собственно такая: скопировать из кучи файлов определенный диапазон с определенного листа (может быть его определять через диалог?) и вставить в открытый файл.

Sub a1()
Dim path, files As String
path = InputBox("Enter path", "Path", CurDir)
files = Dir(path & "\" & "*.xls")
Dim massivFiles()
Do While files <> ""
x = x + 1
ReDim Preserve massivFiles(1, x)
massivFiles(1, x) = path + "\" + files
files = Dir()
Loop
If x = 0 Then
MsgBox ("Files are not found")
Exit Sub
Else

здесь по идее должен быть модуль про копирвоание из файлов. я не могу подобрать скрипт. знакома с ВБА первую неделю.

повторюсь: помогите спасите умираю.
never_mind вне форума
Старый 04.02.2009, 13:10   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Может, подойдёт что-то вроде этого:
Код:
Sub КопированиеИзФайлов()
    Application.ScreenUpdating = False
    Dim WB As Workbook

    MyPath = InputBox("Enter path", "Path", CurDir)
    If Dir(MyPath, vbDirectory) = "" Then MsgBox "Такой папки не существует", vbCritical: Exit Sub
    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

    Filename = Dir(MyPath & "*.xls")
    Dim coll As New Collection

    Do While Filename <> ""
        coll.Add MyPath & Filename
        Filename = Dir()
    Loop

    If coll.Count = 0 Then MsgBox "В выбранной папке не обнаружены файлы Excel", vbCritical: Exit Sub

    For Each file In coll
        Set WB = Workbooks.Open(file)
        If Not WB Is Nothing Then
            WB.Worksheets("Лист1").Range("a2:e5").Copy ThisWorkbook.Worksheets(1).Range("A1")
            wb.close false
        End If
    Next file
End Sub

Последний раз редактировалось EducatedFool; 04.02.2009 в 13:12.
EducatedFool вне форума
Старый 04.02.2009, 13:13   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если же для работы требуется указать несколько избранных файлов из папки, то можно, например, так:
Код:
Sub Main()
    
    Dim Wb As Workbook, i As Long
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = "C:\"
        .AllowMultiSelect = True
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        For i = 1 To .SelectedItems.Count
            Set Wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False)
            
'В следующей строке прописаны ссылка на лист и диапазон копируемых ячеек, а так же
'ссылка на книгу (в данном случае это книга, содержащая этот макрос), лист и на
'ячейку, куда требуется скопировать.

            Wb.Sheets(1).Range("A1:B10").Copy ThisWorkbook.Sheets(1).Range("A1")
            Wb.Close
        Next
    End With
    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 04.02.2009, 13:24   #10
never_mind
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 12
По умолчанию

Редактор ВБА выбает ошибку вот в этой строчке
Wb.Worksheets("Лист1").Range("a2:e5 ").Copy ThisWorkbook.Worksheets(1).Range("A 1")

грит что subscript out of range.
К слову сказать на работе стоит 2000 офис и тут многие команды просто не поддерживаются. например та, которую привел ниже SAS888, с диалогом мульти выбора.
never_mind вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как алгоритм перевести в код VBA valerij Microsoft Office Excel 18 29.05.2008 01:32