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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 18:59   #1
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию Работа с 2 книгами

Здравствуйте. У меня возникли следующие вопросы.
1.Существует первая книга test.xls. Существует вторая книга sum.xls.
Пишу макрос во второй книге, он должен открывать первую копировать информацию с разных ячеей, например A5:G13 и клетку S5 например. Как я делаю сейчас

Открыл книгу test
Сделал её активной
Выделил нужный диапазон
Скопировал
Сделал активной книгу sum
выделил нужный диапазон
вставил

и плюс ещё один круг для второй ячейки например, то есть снова делаю активной первую книгу, потом вторую. Можно ли скопировать что мне нужно за одну итерацию ? Подскажите пожалуйста как.

2. Подскажите как корректно закрыть вспомогательный файл test.xls в макросе sum.xls, у меня в итоге закрываются оба файла.

Спасибо
SashaS вне форума Ответить с цитированием
Старый 25.02.2012, 19:31   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
Sub ПримерИспользования_GetFileName()
ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя файла
' ===================== другие варианты вызова функции =====================
' текстовые файлы, стартовая папка не указана
' ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),")
' файлы любого типа из папки "C:\Windows"
' ИмяФайла = GetFileName(, "C:\Windows", "")
' ==========================================================================

If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла
'MsgBox "Выбран файл: " & ИмяФайла, vbInformation
With GetObject(ИмяФайла)
ThisWorkbook.Sheets(1).[a1] = .Sheets(1).[a1]
.Close 0
End With
End Sub

Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath, _
Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String
' функция выводит диалоговое окно выбора папки с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
If Not IsMissing(InitialPath) Then
On Error Resume Next: ChDrive Left(InitialPath, 1)
ChDir InitialPath ' выбираем стартовую папку
End If
res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна
GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора
End Function
В общем, здесь главное - GetObject().
Если Вам нужно всего лишь взять пару диапазонов из другого файла в любую (не обязательно активную) книгу - можно указать коду куда и что нужно скопировать без всяких активаций.
Другой вариант - занести в ячейки формулы, извлекающие нужные данные (ведь известно, откуда нужно их брать), затем заменить формулы на полученные значения.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.02.2012 в 19:36.
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 19:42   #3
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию

Спасибо за столь подробный ответ, но я не очень понял. Как например с помощью этой функции скопировать приведённый в примере выше прямоугольный диапазон и плюс ту ячейку сразу?
SashaS вне форума Ответить с цитированием
Старый 25.02.2012, 19:48   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
ThisWorkbook.Sheets(1).[A5:G13] = .Sheets(1).[A5:G13]
ThisWorkbook.Sheets(1).[S5] = .Sheets(1).[S5]
И я думаю, что то, что это будет не "сразу" - никакой роли не играет
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 19:51   #5
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию

То есть в итоге такая запись будет корректна:

Sub automation()
FilePath = "C:\Documents and Settings\Sasha\Рабочий стол\March\PCh_test.xls"
Filename = "PCh_test.xls"
Workbooks.Open FilePath
Workbooks(Filename).Activate

ThisWorkbook.Sheets(1).[A5:G13] = .Sheets(1).[A5:G13]
ThisWorkbook.Sheets(1).[S5] = .Sheets(1).[S5]
Workbooks(PCh_test.xls).Close SaveChanges:=False
End Sub
SashaS вне форума Ответить с цитированием
Старый 25.02.2012, 19:58   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Нет, не будет.
Попробуйте так (не проверял):
Код:
Sub automation()
    FilePath = "C:\Documents and Settings\Sasha\Рабочий стол\March\PCh_test.xls"
    With Workbooks.Open(FilePath, ReadOnly:=True)
        ThisWorkbook.Sheets(1).[A5:G13] = .Sheets(1).[A5:G13]
        ThisWorkbook.Sheets(1).[S5] = .Sheets(1).[S5]
        .Close SaveChanges:=False
    End With
End Sub
P.S. Проверил - для диапазона нужно так писать:
Код:
        ThisWorkbook.Sheets(1).[A5:G13].Value = .Sheets(1).[A5:G13].Value
Одиночную ячейку можно и без value копировать.
Но это будут копироваться только данные!
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.02.2012 в 20:08.
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 20:15   #7
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию

Спасибо, но почему-то не работает и с исправлениями из постскриптума (
SashaS вне форума Ответить с цитированием
Старый 25.02.2012, 20:28   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

У меня работает.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 20:41   #9
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию

Посмотрите пожалуйста, я прикрепил два файла. Экзампл это мэйн, в нём макро без пароля. Как вы и написали. Но почему-то не работает. Второй файлик открывается и закрывается и всё
Вложения
Тип файла: rar Example.rar (8.0 Кб, 8 просмотров)
SashaS вне форума Ответить с цитированием
Старый 25.02.2012, 20:49   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Sheets(1) - это первый лист файла!
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книгами по C\C++ MsWindows Общие вопросы C/C++ 4 08.06.2011 19:22
Переключение между книгами stas77 Microsoft Office Excel 5 03.11.2009 19:00
Работа с двумя книгами Sotos Microsoft Office Excel 2 10.02.2009 12:30
Работа с двумя книгами tae1980 Microsoft Office Excel 10 10.02.2009 02:49
работа с двумя книгами Реланиум Microsoft Office Excel 2 23.11.2006 16:37