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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 10:05   #1
Drummer_SV
 
Регистрация: 03.06.2008
Сообщений: 8
По умолчанию Копирование диапазона в другую книгу в цикле

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

пример кода:

Код:
While Filename <> ""    ' перебираем все файлы в текущей папке

   If Not Filename Like ThisWorkbook.Name & "*" Then coll.Add Filename

' открываем все файлы из папки
   a = ipath & Filename
   Set ExcelApp = CreateObject("Excel.Application")
    With ExcelApp
        .Visible = True
        .Workbooks.Open a
        .ActiveWorkbook.Sheets("Основное меню").Select
    End With
    'копируем
    
    Range("A1:AW70").Select
    Selection.Copy

' в текущей книге создаем лист

   Set sh = ThisWorkbook.Sheets.Add
   sh.Name = nmList & i
   path2 = ipath & "[" & Filename & "]"

    ThisWorkbook.Sheets(nmList & i).Cells(1, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

    
    
i = i + 1
Filename = Dir

Wend
Drummer_SV вне форума Ответить с цитированием
Старый 22.12.2010, 11:06   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В коде много лишнего...

Попробуйте как-то так (не проверял, ибо это лишь часть макроса)

Код:
    Dim wb As Workbook, sh1 As Worksheet ' добавьте эту строку
    Application.ScreenUpdating = False ' отключаем перерисовку экрана

    While Filename <> ""    ' перебираем все файлы в текущей папке

        ' зачем добавляете имя в коллекцию???
        If Not Filename Like ThisWorkbook.Name & "*" Then coll.Add Filename

        a = ipath & Filename

        ' зачем запускать новый экземпляр Excel ???
        ' Set ExcelApp = CreateObject("Excel.Application") ' нафиг не нужно
        Set wb = Workbooks.Open(a)
        Set sh1 = wb.Sheets("Основное меню")


        Set sh = ThisWorkbook.Sheets.Add    ' в текущей книге создаем лист
        sh.Name = nmList & i

        'копируем (точнее, переносим только значения)
        sh.Range("A1:AW70").Value = sh1.Range("A1:AW70").Value
        
        wb.Close False ' закрываем файл без сохранения изменений

        i = i + 1
        Filename = Dir
    Wend
EducatedFool вне форума Ответить с цитированием
Старый 22.12.2010, 11:27   #3
Drummer_SV
 
Регистрация: 03.06.2008
Сообщений: 8
По умолчанию

БОльшое человеческое спасибо! Это то что мне нужно.
Drummer_SV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скопировать макросы в другую книгу? alec Microsoft Office Excel 5 30.04.2010 08:13
Макрос для обработки диапазона значений в цикле as-is Microsoft Office Excel 5 08.03.2010 12:39
Задача на выборочное копирование ячеек в уже открытую другую книгу noobnoob Microsoft Office Excel 8 23.11.2009 06:13
Перемещение листа в другую книгу GWolf Microsoft Office Excel 4 04.03.2009 14:53
Копирование листа в другую книгу макросом xamillion Microsoft Office Excel 9 11.10.2008 08:59