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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 16:09   #1
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
Стрелка Создание итогового Файла

Добрый день!
Помогите с макросом, пожалуйста!

Имеем три Книги (Книга1, Книга2, Книга3). Из Книга2 Лист1 копируем диапазон ячеек в Книга1 Лист1, затем из Книга3 Лист1 копируем тот же диапазон ячеек в Книга1 Лист1 начиная с первой пустой ячейки после предыдушего копирования. То есть диапазон может быть заполненым не полностью. Для более подробной илюстрации своих слов прилагаю файлы. (В файле Книга1 Лист1 уже показано что нужно получить).
Вложения
Тип файла: rar Форум.rar (18.6 Кб, 16 просмотров)

Последний раз редактировалось Flangini; 11.06.2009 в 16:12. Причина: Забыл файлы прикрепить :)
Flangini вне форума Ответить с цитированием
Старый 11.06.2009, 22:45   #2
Евгений ГВС
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 43
По умолчанию

Если в списках в Книга2 и Книга3 нет пустых строк внутри списка, то можно использовать метод CurrentRegion для получения диапазона, ограниченного пустыми строками.

Option Explicit

Public Sub UpdateKniga1()

Dim nextRow As Integer

Workbooks("Книга1.xls").Worksheets( "Лист1").Cells.Clear

Workbooks("Книга2.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Copy
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(1, 1).PasteSpecial

nextRow = Workbooks("Книга2.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Rows.Count + 1

Workbooks("Книга3.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Copy
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).PasteSpecial
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).EntireRow.Delete

End Sub
Евгений ГВС вне форума Ответить с цитированием
Старый 15.06.2009, 09:11   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Надежнее так:
Код:
Sub UpdateKniga1()
    Dim sh1 As Worksheet, sh2 As Worksheet, i As Long: Application.ScreenUpdating = False
    Set sh1 = Workbooks("Книга2.xls").Sheets("Лист1"): Set sh2 = Workbooks("Книга3.xls").Sheets("Лист1")
    ThisWorkbook.Sheets(1).Activate: Cells.Clear: sh1.UsedRange.Copy [A1]
    i = ActiveSheet.UsedRange.Rows.Count + 1: sh2.UsedRange.Copy Cells(i, 1): Rows(i).Delete
End Sub
Копируются все данные. В последствии, если требуется, можно удалить пустые строки.

P.S. Макрос должен находиться в программном модуле книги "Книга1.xls".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.06.2009, 09:20   #4
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

На самом деле у меня около 150 файлов, первый макрос от Евгений ГВС я смог дополнить получил:

Public Sub UpdateKniga1()

Dim nextRow As Integer

Workbooks("Книга1.xls").Worksheets( "Лист1").Cells.Clear

Workbooks("Книга2.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Copy
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(1, 1).PasteSpecial

nextRow = Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Rows.Count + 1

Workbooks("Книга3.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Copy
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).PasteSpecial
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).EntireRow.Delete

nextRow = Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Rows.Count + 1

Workbooks("Книга4.xls").Worksheets( "Лист1").Cells(1, 1).CurrentRegion.Copy
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).PasteSpecial
Workbooks("Книга1.xls").Worksheets( "Лист1").Cells(nextRow, 1).EntireRow.Delete

End Sub

а Ваш код, SAS888, к сожалению не знаю как модернизировать
Flangini вне форума Ответить с цитированием
Старый 16.06.2009, 11:06   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
На самом деле у меня около 150 файлов...
Так Вы сформулируйте задачу полностью. Просто добавлять 150 строк кода, по-моему, глуповато.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.06.2009, 08:11   #6
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
Восклицание

Цитата:
Сообщение от SAS888 Посмотреть сообщение
.. добавлять 150 строк кода, по-моему, глуповато.
Абсолютно с Вами согласен!!! но за отсутствием необходимых знаний мне пока больше ничего не остаётся

Задача: Есть 150 файлов, в которых на Лист1 содержится информация о людях, необходимо скопировать данные из этих файлов в один, добавив столбец "Название файла", чтобы потом можно было определить из какого файла была скопирована та или иная инфа.
Flangini вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание файла leahov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 18.05.2011 23:16
Открытие файла и создание графика на основе чисел из файла Simon..14 Общие вопросы C/C++ 8 09.06.2009 10:18
Не печатается заголовок итогового столбца отчета madmech Общие вопросы Delphi 3 15.05.2009 16:19
Создание файла Nowise Паскаль, Turbo Pascal, PascalABC.NET 7 04.04.2008 19:55
Создание файла BigRem Общие вопросы Delphi 8 06.01.2008 16:52