![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]()
Еще вопрос к знатокам:
У меня есть ряд тематических книг с исходными данными. В рабочую книги из них выдергиваем ту или иную информацию. Есть книга с шаблонами оформления таблиц, в рабочую книгу нужно скопировать несколько строй. Алгоритм приблезительно такой (по памяти): 1. Переключаемся на книгу("шаблоны").лист("шаблон1") 2. .range(cells(1,1), cells(3,33)).copy книга("рабочия"). лист("рабочий1").cells(1,1) 3. Переключаемся на книгу("рабочия").лист("рабочий1") для дальнейше работы. Не удобно то что приходиться переключать на книгу с шаблонами. Конструкция вида при текущем книгу("рабочия").лист("рабочий1") не работает: книга("шаблоны").лист("шаблон1").ra nge(cells(1,1), cells(3,33)).copy книга("рабочия"). лист("рабочий1").cells(1,1) Есть ли способ уменьшить колличество переключений между книгами?
С уважением, Алексей.
|
![]() |
![]() |
![]() |
#2 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
![]() Цитата:
Попробуйте так: Код:
Цитата:
В строке книга("шаблоны").лист("шаблон1").ra nge(cells(1,1), cells(3,33)).copy Вы пытаетесь скопировать диапазон из книги шаблоны, в то же время обращаясь к ячейкам активной книги, которой является книга рабочия - cells(1,1), cells(3,33). То есть, если вместо cells(1,1) Вы бы поставили книга("шаблоны").лист("шаблон1").ce lls(1,1), - то всё бы получилось. Хотя строка получилась бы достаточно длинной: книга("шаблоны").лист("шаблон1").Ra nge(книга("шаблоны").лист("шаблон1").Cells(1, 1), книга("шаблоны").лист("шаблон1").Cells(3, 33)).Copy книга("рабочия").лист("рабочий1").C ells(1, 1) Но гораздо удобнее использовать предложенный мной вариант типа Шаблон.[a1:an3].Copy РабочийЛист.[a1] РабочийЛист.Range("a1:a45").Copy Шаблон.Cells(2, 5)
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 04.02.2009 в 23:06. |
||
![]() |
![]() |
![]() |
#3 |
Почти "Чайник"
Форумчанин
Регистрация: 09.06.2008
Сообщений: 134
|
![]()
Если известны адрес файла и расположение в нём данных, то сам файл даже не обязательно открывать.
Достаточно прописать ссылку на его содержимое. например как это рекомендовано в этом коде: Код:
Скачано отсюда:http://www.msoffice.nm.ru/faq/macros.htm |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]()
Спасибо, за разъяснения.
Буду пользоваться этим способом.
С уважением, Алексей.
|
![]() |
![]() |
![]() |
#5 | ||
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]() Цитата:
Цитата:
С уважением, Алексей.
|
||
![]() |
![]() |
![]() |
#6 | |
Почти "Чайник"
Форумчанин
Регистрация: 09.06.2008
Сообщений: 134
|
![]() Цитата:
Если данные сразу-же в нужные ячейки получать? |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]()
Сегодня подробно расмотрю на работе. До конца механизм пока не понял.
С уважением, Алексей.
|
![]() |
![]() |
![]() |
#8 |
Почти "Чайник"
Форумчанин
Регистрация: 09.06.2008
Сообщений: 134
|
![]()
Суть метода такая:
Если в ячейке А1 сделать ссылку на ячейку другой книги, а потом эту книгу закрыть, то останется формула ссылающяяся на закрытый файл. Если данные в том файле изменить (не важно каким способом) то после нажатия в нашей книге Правка-связи-обновить получим новое значение в ячейке А1 При этом файл содержащий информацию остаётся закрытым. Остаётся только макросом записать в ячейки (куда нужно вставлять информацию) формулы содержащие связь с нужным файлом. Range("A1").Formula = "='" & iPath & "[" & iFile & "]" & iList & "'!" & "A1" И приравнять например Range("A1") = Range("A1") При этом в ячейку запишется число вычисленное по формуле находящейся в ячейке. (тоесть вместо ссылки будет цифра или текст) Ну а значения пути (iPath), названия файла( iFile), и названия листа (iList) Нужно присвоить заранее. (переменные можно обозвать и по другому) Соответственно и место вставки тоже может тбыть произвольным а не именно Range("A1") главное что .Formula = .... Короче всё очень просто. При проверке лучше Range("A1") = Range("A1") пропустить, чтобы если что, то ошибку было видно Вот запись из действующего файла: СтрОтгр = [Заказчики!Z1].Value - 99 If СтрОтгр < 2 Then СтрОтгр = 2 Range("Заказчики!Z2:Z101").Formula = "='\\Klimat-server\менеджеры\расчет воздуховодов\1\[Отгрузка.xls]Лист1'!$A" & СтрОтгр Данный код получает текущюю информацию (100 ячеек) из файла находящегося в сети (на другой машине) не открывая сам файл Последний раз редактировалось КаМММ; 06.02.2009 в 18:44. |
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]()
<...>
Спасибо! Цитата:
![]()
С уважением, Алексей.
|
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
![]() Цитата:
![]() Sub test() Dim Шаблон As Worksheet: Set Шаблон = Workbooks("шаблон.xls").Worksheets( "таб.3") Dim РабочийЛист As Worksheet: Set РабочийЛист = Workbooks("тест-28.xls").Worksheets("temp") Шаблон.Range(Cells(1, 1), Cells(16, 33)).Copy РабочийЛист.Cells(1, 1) End Sub
С уважением, Алексей.
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
dll с двумя exe'шниками С# | TaTT DoGG | Общие вопросы .NET | 24 | 25.11.2008 21:19 |
Работа с TDBCtrlGrid и двумя таблицами из БД | kiber0net0 | БД в Delphi | 4 | 02.10.2008 00:10 |
Уравнение с двумя неизвестными | sds | Помощь студентам | 4 | 23.04.2008 23:13 |
Соединение можеду двумя ПК | Killer_djon | Общие вопросы Delphi | 3 | 02.05.2007 12:14 |
работа с двумя книгами | Реланиум | Microsoft Office Excel | 2 | 23.11.2006 16:37 |