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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2013, 17:32   #1
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию Создание макроса для копирования с закрытой книги

Вобщем есть "книга1.xlsx" и "книга2.xlsx" . В каждой книге есть лист с названием "Лист1". Нужно скопировать данные с "книга1.xlsx" с листа "Лист1" в книгу "книга2.xlsx" на такой же лист "Лист1".

При этом книга с которой нужно копировать закрытая. В процесе копирования вторую книгу с которой нужно скопировать открывать не нужно (Или же этот процес скрыть).

Данные которые нужно скопировать находятся в диапазоне А1:MH800 . При этом нужно чтоб скопировались все формулы, цвета ячеек, рамки и так далее. Тоисть нужно сделать полную копию этих ячеек. Буду очень благодарен помощи!
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 17:36   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Как получить данные из закрытой книги?

Как собрать данные с нескольких листов или книг?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 20.01.2013, 17:49   #3
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию

По поводу ссылки "Как получить данные из закрытой книги". Пробовал но копируются только занчения. Такие элементы как цвет ячейки, рамка, формулы не копируются
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 17:57   #4
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию

Вот этот код впринципе подошел бы если бы происходило полное копирование.

Sub Get_Value_From_Close_Book()
Dim sShName As String, sAddress As String, vData
'Отключаем обновление экрана
Application.ScreenUpdating = False
Workbooks.Open "C:\Documents and Settings\Книга1.xls"
sAddress = "A1:C100" 'или одна ячейка - "A1"
'получаем значение
vData = Sheets("Лист1").Range(sAddress).Val ue
ActiveWorkbook.Close False
'Записываем данные на активный лист книги,
'с которой запустили макрос
If IsArray(vData) Then
[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
Else
[A1] = vData
End If
'Включаем обновление экрана
Application.ScreenUpdating = True
End Sub

Тоисть этот код не копирует Формулы в ячейках, цвета, рамки
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 18:00   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

А по другой ссылке не судьба сходить?

Если отталкиваться от статьи про копирование из закрытой книги, то нужно эти строки:
Код:
vData = objCloseBook.Sheets("Лист1").Range(sAddress).Value
    objCloseBook.Close False
    'Записываем данные на активный лист книги,
    'с которой запустили макрос
    If IsArray(vData) Then
        [A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
    Else
        [A1] = vData
    End If
заменить такими:
Код:
objCloseBook.Sheets("Лист1").Range(sAddress).Copy Thisworkbook.Sheets(1).Range("A1")
код тогда скопирует указанный диапазон в ячейку А1 первого листа книги с кодом.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 20.01.2013 в 18:06.
The_Prist вне форума Ответить с цитированием
Старый 20.01.2013, 18:11   #6
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию

Если бы я знал как обьединить эти два кода я бы вопрос здесь не задавал. Я только начинаю осваивать Excel, а тем более VBA. Несколько элементарных кодов научился писать и все, много что не понимаю как работает.
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 18:23   #7
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Чем последний ответ не устраивает? Мне кажется этого достаточно, чтобы понять принцип.
То, что Вы начинаете осваивать замечательно. Но по Вашему вопросу видно только то, что Вы хотите получить готовое решение, а не пытаетесь решить сами. Вы не выложили своих попыток объедининть два кода или хоть каких-то попыток решить свою проблему. Только вопрос и все.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 20.01.2013, 19:22   #8
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию

Спасибо большое, теперь работает как и нужно.

Но все равно не до конца понимаю почему первый код не работал.

Например этот код
Dim sShName As String, sAddress As String, vData
Не могу понять за что отвечает. Предполагаю что здесь перечисляются команды которые будут в дальнейшем применяться.

Dim objCloseBook As Object не понимаю

Application.ScreenUpdating = Fals
Делает так чтоб экран не мерцал, тоисть чтоб не видно было как работает код.

Set objCloseBook = GetObject("C:\Documents and Settings\Книга1.xls")
Этот открывает документ скрыто.

sAddress = "A1:K10"
Здесь понятно. Указывается диапазон который нужно скопировать

objCloseBook.Sheets("Лист").Range(s Address).Copy ThisWorkbook.Sheets(1).Range("A1")

objCloseBook я так понял обращается к скрытому документу
Sheets("Лист") этот соответственно к листу в этом документе
Range(sAddress) это переход по указаному выше диапазону, насколько я понял
Copy ThisWorkbook копирование этого диапазона
ThisWorkbook.Sheets(1) переход в активную книгу
.Range("A1") переход к ячейке.

Вот только не понял где код который отвечает за вставку данных с буфер обмена

Так то впринципе, вроде немножко понимаю код. Но составить самому или найти ошибку, это еще далеко для меня
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 19:28   #9
virus1990
 
Регистрация: 10.11.2012
Сообщений: 6
По умолчанию

На самом деле я весь день сидел над этим кодом. Ссылку которую Вы дали я тоже сегодня видел, но не хватило знаний ее переделать.
И вообще перед тем как задаю вопрос я всегда сам пол дня ищу ответ в интернете. Тогда, если не нашел ответа, намного интересней будет знать ответ.

В даном случае не приводил своих примеров так как они настолько примитивно не правильно написаны что мне стыдно их даже выкладывать здесь, так как исправлять там нечего. Проще новый написать. Еще раз спасибо за помощь
virus1990 вне форума Ответить с цитированием
Старый 20.01.2013, 19:56   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Почитайте первый раздел на этой странице: Что умеет Excel
Там есть ответ на некоторые вопросы.

Строка, отвечающая за копирование-вставку:
Код:
objCloseBook.Sheets("Лист").Range(s Address).Copy ThisWorkbook.Sheets(1).Range("A1")
Подбробнее можно почитать в справке по методу Copy. У него есть необязательный параметр Destination, который определяет куда вставить скопированное.

P.S. Советую срочно освоить кнопки тегов при создании сообщений. Читать листинги кодов без оформления не очень-то удобно.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание макроса в EXCEL для копирования AKrupkin Microsoft Office Excel 10 17.09.2014 01:57
Создание выпадающего списка из другой закрытой книги S_Brodsky Microsoft Office Excel 13 15.03.2012 20:49
Копирование листов из закрытой книги rubius2008 Microsoft Office Excel 6 05.02.2011 22:44
СУММЕСЛИ из закрытой книги Sha Microsoft Office Excel 1 16.12.2009 17:09
Копирование из закрытой книги Maxx Microsoft Office Excel 11 11.08.2009 10:39