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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2009, 10:43   #1
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию Ссылка на файл из текущей папки! Сбор инфы в один файл!

Исходная задача выглядит так: в одной папке лежит 11 файлов. В один файл собираются данные из осталных 10. Соответственно, в этом самом главном файле ссылки на остальные десять файлов, причем имена всех книг, листов и ячеек известны заранее. В один прекрасный день я хочу скопировать свой главный файл в другую папку, в которой тоже лежит 10 книг, которые называются также, но данные в которых другие.
И вот она цель - в самом главном файле должны обновиться все данные!!!
Для решения я хочу в главном файле сделать такие ссылки, которые указывает на файл из той папки, в которой находится главный файл.
Грубо говоря, чтобы вместо жесткого "D:\\WORK\FG.XLSX" было что-то навроде "~\FG.XLSX".
Как написать вот это ЧТО-ТО?
Напишите пожалуйста, чисто теоретически это возможно осуществить?
Может быть вообще стоит действовать по другому?
mephist вне форума Ответить с цитированием
Старый 09.07.2009, 11:43   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Если работает макрос, то удобно будет использовать:
Код:
ActiveWorkbook.Path & "\FG.XLSX"
pivas вне форума Ответить с цитированием
Старый 09.07.2009, 11:47   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Позволю замечание: т.к. не известно, какая книга в данный момент активна, лучше использовать не
Код:
ActiveWorkbook.Path & "\FG.XLSX"
а
Код:
ThisWorkbook.Path & "\FG.XLSX"
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.07.2009, 12:11   #4
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Спасибо большое. Форум програмистов становится моим учебником по VB. Спасибо!
Только вот я не хотел писать макрос. Я просто хотел в ячейки главной книги вбить ссылки, содержащие имена книг. В результате книги меняются, имена остаются, данные сами обновляются. Разве так не получится??? Разве нельзя ссослаться на файл без полного пути???
mephist вне форума Ответить с цитированием
Старый 09.07.2009, 13:17   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если обе книги открыты, то (обратите внимание) ссылки в ячейках не содержат пути к файлу. Если же книгу-источник закрыть, то в ячейках со ссылками появится путь (уж так работает Excel). Если же переместить книгу-источник, то ссылка потеряется и Excel предложит указать новый путь к книге-источнику.
Поэтому, можно поступить так: при открытой книге, содержащей ссылки, открыть книгу-источник, затем сохранить ее по новому пути, затем закрыть. После таких действий, файл со ссылками будет искать книгу-источник в сохраненной папке, т.е. путь поменяется автоматически.
Естественно, что все это можно сделать и программно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.07.2009, 14:25   #6
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Большое спасибо за помощь!!!
Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если обе книги открыты, то (обратите внимание) ссылки в ячейках не содержат пути к файлу.
Я всегда обращал на это внимание. Просто, очень часто встречал возможность адресации к текущей папке.
Цитата:
Сообщение от SAS888 Посмотреть сообщение
можно поступить так: при открытой книге, содержащей ссылки, открыть книгу-источник, затем сохранить ее по новому пути, затем закрыть.
Это к сожелению не применимо, ибо книг-источников много, да и делать надо все атоматически.
Цитата:
Сообщение от SAS888 Посмотреть сообщение
Естественно, что все это можно сделать и программно.
Вот это самое интересное. Может быть подскажете, как сделать это программно?
У меня есть несколько вариантов:
1) Забить в макросе ссылки на нужные файлы. (Но я не знаю, как это осуществить. Ибо ссылок будет тысячи. Писать вручную не вариант. Как можно это автоматизировать???)
2) Забить в макрос копирование листов из файлов-источников в главный файл. (Тогда подскажите мне какой функцией можно скопировать? Какой функцией скрыть листы на которые будет производиться копирование? Как потом удалить из книги все скрытые листы?)
mephist вне форума Ответить с цитированием
Старый 10.07.2009, 06:08   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не совсем понятно, что у Вас не получается. Если нужно это:
Цитата:
В один прекрасный день я хочу скопировать свой главный файл в другую папку, в которой тоже лежит 10 книг, которые называются также, но данные в которых другие.
И вот она цель - в самом главном файле должны обновиться все данные!!!
то зачем что-то предпринимать? Если Вы переместили Ваш главный файл в другую папку, в которой присутствуют все файлы с такими же именами книг и листов (с любыми данными), то достаточно, при открытии главного файла на запрос обновить связи ответить положительно.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 10.07.2009 в 06:16.
SAS888 вне форума Ответить с цитированием
Старый 10.07.2009, 12:13   #8
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

У меня таким образом должны обрабатываться сотни файлов-десятки тысяч ссылок.
Я написал макрос,который тупо прикрепляет ссылку к ячейке.
Код:
Range("AE6").FormulaR1C1 = "=‘[21 (Revenue)mh.xlsx]Приложение 21.1'!R6C31"
Когда он запускается,то спрашивает обновление связей и заполняет ячейки. Но работает очень медленно. На сотню ссылок он тратит минут пять.
Можно его ускорить???
А может кто-нибудь помочь с моими предыдущими вопросами:
1) можно ли листу из макроса присвоить атрибут скрутый (то есть просто скрыть лист автоматически)???
2) можно ли удалить все листы из книги, которым присвоен атрибут скрытый астоматически из макроса???
mephist вне форума Ответить с цитированием
Старый 10.07.2009, 12:22   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Скрыть лист с именем "Имя_листа" можно так:
Код:
Sheets("Имя_листа").Visible = False
Удалить все скрытые листы в книге "Книга1.xls" можно так:
Код:
Dim sh As Worksheet: Application.DisplayAlerts = False
For Each sh In Workbooks("Книга1.xls").Sheets
    If Not sh.Visible Then sh.Delete
Next
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.07.2009, 12:35   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Я написал макрос,который тупо прикрепляет ссылку к ячейке.
Ну, во-первых, зачем абсолютная адресация?
Во-вторых, можно макросом просмотреть по всем листам только те ячейки, которые содержат формулы. И, если есть ссылка, то заменять в ней путь. Так будет быстрее. Но я не думаю, что при переносе (копировании) Вашего главного файла в другую папку, содержащую файлы-источники, выполнять подобный макрос будет быстрее, чем разрешить Excel-ю обновить связи при открытии файла.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка на Excel-файл через поле таблицы megaten БД в Delphi 1 29.05.2009 01:18
Как сохранить файл в текущей папке? sid99999 Microsoft Office Excel 2 22.05.2009 11:59
один файл, две программы... Deathwatcher Общие вопросы Delphi 0 18.11.2008 12:39
Объединить в один файл asale Microsoft Office Excel 2 12.02.2008 13:18
Сбор инфы с сайта. Mss_Smith Помощь студентам 6 17.06.2007 16:26