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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.10.2008, 21:06   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию Копирование листа в другую книгу макросом

Помогите, пожайлуста, макросом копировать лист в другую книгу. То есть нужно из 2-х книг скопировать листы в 3-ю...
Вложения
Тип файла: rar пример.rar (4.6 Кб, 118 просмотров)
xamillion вне форума
Старый 05.10.2008, 21:20   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Для начала неплохо было бы знать, из какой книги будет запускаться макрос, из каких книг (интересуют названия файлов) будут копироваться листы, как буде называться файл с результатом (каждый раз создавать новый файл или перезаписывать файл результат.xls), и т.д.

Сам код в принципе очень прост, но для его написания нужны все эти нюансы...


--------- примечание модератора - вдруг кому пригодится --------------
Цитата:
Надстройка LOOKUP предназначена для сравнения и подстановки значений в таблицах Excel.

Если вам надо сравнить 2 таблицы (по одному столбцу, или по нескольким),
и для совпадающих строк скопировать значения выбранных столбцов из одной таблицы в другую,
надстройка «Lookup» поможет сделать это нажатием одной кнопки.


В настройках программы можно задать:
  • где искать сравниваемые файлы (использовать уже открытый файл, загружать файл по заданному пути, или же выводить диалоговое окно выбора файла)
  • с каких листов брать данные (варианты: активный лист, лист с заданным номером или названием)
  • какие столбцы сравнивать (можно задать несколько столбцов)
  • значения каких столбцов надо копировать в найденные строки (также можно указать несколько столбцов)

Скачать надстройку для сравнения таблиц Excel и копирования данных из одинаковых строк


Последний раз редактировалось EducatedFool; 30.09.2013 в 09:31.
EducatedFool вне форума
Старый 05.10.2008, 22:51   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Для начала неплохо было бы знать, из какой книги будет запускаться макрос, из каких книг (интересуют названия файлов) будут копироваться листы, как буде называться файл с результатом (каждый раз создавать новый файл или перезаписывать файл результат.xls), и т.д.

Сам код в принципе очень прост, но для его написания нужны все эти нюансы...
Макрос будет запускаться из книги результат.xls, файл с результатом пусть так и называется результат.xls и каждый раз перезаписывается, книги откуда копируется лист будут называться 1.xls и 2.xls, и листы в них соответственно в книге 1.xls называется "1", в книге 2.xls называется "2", и чтоб в результирующем файле они так и назывались 1 и 2... Все просто, но что то никак не осилю...
xamillion вне форума
Старый 06.10.2008, 10:16   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. У Вас всего 3 книги? Т.е. рабочая и еще две? Или их может быть сколько угодно?
2. В книгах "1.xls" и "2.xls" только 1 лист? Если нет, то куда девать данные с других листов?
3. Если заранее известен диапазон (можно с избытком) ячеек листов исходных книг ("1.xls" и "2.xls"), то можно обойтись без их открытия - копирования - закрытия. Создаем ссылку на "закрытую" (кстати, не обязательно) книгу, затем удаляем связи, оставляя значения.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 06.10.2008, 20:04   #5
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
1. У Вас всего 3 книги? Т.е. рабочая и еще две? Или их может быть сколько угодно?
2. В книгах "1.xls" и "2.xls" только 1 лист? Если нет, то куда девать данные с других листов?
3. Если заранее известен диапазон (можно с избытком) ячеек листов исходных книг ("1.xls" и "2.xls"), то можно обойтись без их открытия - копирования - закрытия. Создаем ссылку на "закрытую" (кстати, не обязательно) книгу, затем удаляем связи, оставляя значения.
1. Книги всего три, рабочая и еще две!
2. В книгах "1.xls" и "2.xls" нужен только один лист,"1" и "2"!
3. Копирывать можно целый лист или диапазон (например, A1:M10000)... Лучше это был бы макрос....
xamillion вне форума
Старый 06.10.2008, 23:54   #6
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

в реузльтат'е
Код:
dim book as workbook
dim cbook as workbook
dim nsheet as worksheet
dim prevsheet as worksheet
set cbook = activeWorkbook
set prevsheet = activeSheet

set book = workbooks.open(путь+"1.xls")
set nsheet = cbook.Sheets.Add(Type:=xlWorksheet) 
nsheet.name = "1"
book.sheets("1").Range("A1:M10000").copy destination:=nsheet.range("A1")
book.close false

set book = workbooks.open(путь+"2.xls")
set nsheet = cbook.Sheets.Add(Type:=xlWorksheet) 
nsheet.name = "2"
book.sheets("2").Range("A1:M10000").copy destination:=nsheet.range("A1")
book.close false

prevsheet.activate
tolikman вне форума
Старый 07.10.2008, 06:25   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если в книге "результат.xls" листы 1 и 2 подготовлены,т.е. нарисованы границы таблиц, то можно обойтись без открытия исходных файлов. Например, так:
Код:
Sub Main()
    Dim i As Integer
    Const myPath = "D:\Temp" 'Подставьте требуемый путь к папке.
    For i = 1 To 2
        Sheets(i).Select
        With Range("A1:M10000")
            .ClearContents
            .Formula = "='" & myPath & "\[" & i & ".xls]Лист1'!$A$1:$M$10000"
            .Value = .Value
            ActiveWindow.DisplayZeros = False
        End With
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 07.10.2008, 08:42   #8
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от tolikman Посмотреть сообщение
в реузльтат'е
Код:
dim book as workbook
dim cbook as workbook
dim nsheet as worksheet
dim prevsheet as worksheet
set cbook = activeWorkbook
set prevsheet = activeSheet

set book = workbooks.open(путь+"1.xls")
set nsheet = cbook.Sheets.Add(Type:=xlWorksheet) 
nsheet.name = "1"
book.sheets("1").Range("A1:M10000").copy destination:=nsheet.range("A1")
book.close false

set book = workbooks.open(путь+"2.xls")
set nsheet = cbook.Sheets.Add(Type:=xlWorksheet) 
nsheet.name = "2"
book.sheets("2").Range("A1:M10000").copy destination:=nsheet.range("A1")
book.close false

prevsheet.activate
в целом годится... спасибо...

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если в книге "результат.xls" листы 1 и 2 подготовлены,т.е. нарисованы границы таблиц, то можно обойтись без открытия исходных файлов. Например, так:
Код:
Sub Main()
    Dim i As Integer
    Const myPath = "D:\Temp" 'Подставьте требуемый путь к папке.
    For i = 1 To 2
        Sheets(i).Select
        With Range("A1:M10000")
            .ClearContents
            .Formula = "='" & myPath & "\[" & i & ".xls]Лист1'!$A$1:$M$10000"
            .Value = .Value
            ActiveWindow.DisplayZeros = False
        End With
    Next
End Sub
заполняет весь диапазон "#ССЫЛКА!"...


может как то можно копирывать весь лист?
xamillion вне форума
Старый 07.10.2008, 09:00   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
заполняет весь диапазон "#ССЫЛКА!"
Значит макрос не находит требуемые файлы по заданному пути. Вы либо не изменили прописанный в коде макроса путь, либо указали неверный путь к папке с файлами.
Ну, а если открывать и копировать, то можно, например, так:
Код:
Sub Main()
    Dim i As Integer
    Application.ScreenUpdating = False
    Const myPath = "D:\Temp" 'Подставьте требуемый путь к папке.
    For i = 1 To 2
        With ThisWorkbook.Sheets(i)
        Workbooks.Open Filename:=myPath & Application.PathSeparator & i & ".xls"
        Cells.Copy .[A1]
        ActiveWorkbook.Close SaveChanges = False
        End With
    Next
End Sub
Если же файл с макросом находится в той же папке, что и файлы "1.xls" и "2.xls", то можно так:
Код:
Sub Main()
    Dim i As Integer
    Application.ScreenUpdating = False
    For i = 1 To 2
        With ThisWorkbook.Sheets(i)
        Workbooks.Open Filename:=ThisWorkbook.Path & Application.PathSeparator & i & ".xls"
        Cells.Copy .[A1]
        ActiveWorkbook.Close SaveChanges = False
        End With
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 11.10.2008, 08:59   #10
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Спасибо, очень помогло
xamillion вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хелп с макросом Aivar Microsoft Office Word 8 28.09.2008 02:10
Помогите с макросом SoFuWa Microsoft Office Excel 7 15.08.2008 15:26
Копирование данных из одной таблицы в другую! фЁдОр БД в Delphi 18 06.01.2008 19:27
Копирование таблиц из одной базы в другую KuH БД в Delphi 7 27.09.2007 15:18
добавление листа в книгу по условию Sasha K Microsoft Office Excel 4 30.01.2007 15:44