powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Взаимодействие одной книги эксель с другой
25 сообщений из 37, страница 1 из 2
Взаимодействие одной книги эксель с другой
    #36402551
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Вот о чем речь:
Сейчас формируется файл (назовем его к "Сводный"), где банально в столбик должны быть перечислены сотрудники, так вот в соседних столбиках каждого сотрудника подразумевается вести мониторинг его деятельности следующим образом: в шапки в строчку перечислены ФИО сотрудника, задача и дни календаря от 1 до 31, в столбик сотрудники, напротив каждого сотрудника его задача, и далее свободный массив ограниченный сверху календарными днями а слева задачами (1 задача на 1 строчку массива). Все это вроде как присказка - чтобы дать описание так сказать. В чем суть проблемы. Абсолютное большинство задач выполняется на Excel, поэтому поставлена задача средствами Excel выполнить мониторинг работы сотрудников (т.е. когда начали выполнять задачу, в течении выполнения, когда закончили). Понятно что лучше бы иметь исходники в виде файлов но таких нет. Для себя начал процесс с ознакомления с функцией из категории "Дата и время" - "ТДАТА" (возвращает текущую дату и время в формате даты и времени", другими словами в указанной ячейки будет отображаться системной время и дата, и затем при каждом действии с файлом (добавление новых данных, удаление, в общем любое действие - эти параметры (время и дата) обновляются). Можно сделать следующее установить функцию "ТДАТА" на всех книгах сотрудников где решается задача и сделать ссылки на эту ячейку на против каждой задачи в файле "Сводный". Это даст возможность видеть что если данные начали менять то и процесс начался если не изменяются – то закончился, но есть одна проблема. Проблема: если у сотрудника в книге есть 2 страницы на каждой из которых решается своя задача (при этом существующей организационный процесс не позволит создать отдельно каждый файл под свою задачу), то результат мониторинга решения задачи не до конца корректный, т.к. изменения данных на любой из страниц влияет на изменение функции "ТДАТА" всей книги. Вопрос можно ли подобную функцию (речь про "ТДАТА") реализовать так чтобы она обновлялась при изменении на отдельном листе, а для некоторых задач еще нужно и привязка к конкретной ячейки или диапазону ячеек.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36402575
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В прикрепленном документе – есть небольшой пример, с примечаниями в файле «Сводный».
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36402632
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Читал между строк и ничего не понял
Если Вам надо фиксировать начало и конец выполнения какой-либо операции, так пусть тот, кто будет заполнять книги (не сводную) и ставит там дату начала и конца, зачем функция ТДАТА?
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36402955
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mЧитал между строк и ничего не понял
Если Вам надо фиксировать начало и конец выполнения какой-либо операции, так пусть тот, кто будет заполнять книги (не сводную) и ставит там дату начала и конца, зачем функция ТДАТА?

так не пойдет, нужно именно удаленно получать информацию без вмещательства того кто заполняет книгу (не сводную) - что-то вроде функции контроля
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36403165
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Опишите, пошагово, как должен происходит процесс контроля, подумаем...
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36403272
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopTin, для того, чтобы избавится от летучести формулы ТДАТА() можно предложить использовать макрос который срабатывает при изменении ячейки диапазона и подставляет в B1 дату изменения конкретного листа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Option Explicit
Const RangeToWatch = "A2:E5"  'диапазон в который необходимо отслеживать

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range(RangeToWatch)) Is Nothing Then
       [B1] = Now ' [b1] ячейка, куда будет подставляться дата и время изменения диапазона листа
    End If
End Sub
Код вставляется в модуль листа:
Правой кнопкой мыши по ярлычку листа -> Исходный текст
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36403280
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopTin, а зачем нужен такой тотальный контроль?
Я особого смысла не вижу.
сотруднику можно будет предложить такой же простенький макрос, который будет изменять ячейки через определенный интервал времени, а сам он будет или курить или чай пить.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36403707
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06, спасибо за макрос, сейчас буду пробовать его применить. А контроль как мне видется нужен как раз, чтобы сотрудник шел пить кофе или курить только после того сделал свой расчет/задание (одним словом дело) - ну да ладно, это все лирика и пожелания руководства. Отпишу чуть-позже, что получилась на практике у меня с макросом (может какие вопросы появятся).
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36404139
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06, конечно же все работает (думаю Вы и не сомневались!) - спасибо... Если сможите, подскажите как оптимизировать Ваш макрос, дело в том, что мне надо сделать не маленькое количество контрольных диапазонов, однако:
1. Первое: большинство из может имеет одинаковую структуру, т.е. есть 6 разных книг (разные названия книг), в этих книгах по 5 функциональных листов. Так вот надо на каждом листе выбрать контролируемый диапазон и перенести его в файл "Свод". Если учитывать, что в каждая книга имеет разное название и внутренние наполнения цифр, но расположение контролируемого диапазона на листах идентично.
2. Второе: Период работы с книгой - месяц, через месяц книга со старыми полученными результатами храниться (вроде как архив), и создается новая книга.
Вопрос: раз внутренние диапазоны идентичны и раз из месяца в месяц появляется новая аналогичная книга - есть ли возможность оптимизировать настройку связей мне необходимых?!!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36404541
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей06, при практическом применении появилась еще одна особенность. Так как книга "Свод" (на которую завязаны все ссылки с книг сотрудников) находится не на сетевом диске обновление этих ссылок не происходит автоматически, а только при открытии книги по запросу обновить, или через командную консоль - Правка/Связи (можно в ручном режиме обновлять по одной связи) - в этом случаи вопрос - если связей не мало и не удобно постоянно закрывать/открывать книгу чтобы их обновить или делать это пошагово (по одной связи) - можно ли сделать макросом какую-то кнопку прописав на нее определенный диапазон связей, которые обновлялись бы нажатием этой кнопки?!!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36404930
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopTin, не знаю, как автоматически обновлять связи...
и в форуме на быструю руку ничего не нашел, кроме своих же вопросов.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36405086
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а записать это действо в макрос не пробовали?
Код: plaintext
1.
2.
    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест.xls", Type:=xlExcelLinks
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36405120
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Ну а записать это действо в макрос не пробовали?
Код: plaintext
1.
2.
    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест.xls", Type:=xlExcelLinks


Hugo121, а указать также как и в ответе Сергей06 можете что именно где добавить (имя файла, диапазон) и как использовать? Я так понимаю речь идет об автоматическом обновлении?!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36405142
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так подробно в этом случае зачем?
C:\тест.xls - это имя файла, откуда обновляются данные.
Диапазона никакого нет, обновляет все связи с этим файлом.
Это я так думаю - просто записал процесс в макрос, смотрю, что получилось.
Т.е. если так перечислить все свои связанные файлы и добавить это всё в код кнопки, можно обновлять по нажатию на кнопку.
Надо подробнее?
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36405283
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Ну так подробно в этом случае зачем?
C:\тест.xls - это имя файла, откуда обновляются данные.
Диапазона никакого нет, обновляет все связи с этим файлом.
Это я так думаю - просто записал процесс в макрос, смотрю, что получилось.
Т.е. если так перечислить все свои связанные файлы и добавить это всё в код кнопки, можно обновлять по нажатию на кнопку.
Надо подробнее?

Если можно да!
А именно - я уточнил как сделать кнопку и назначить для неё макрос, но вот как правильно макрос записать - не знаток. Мог бы ты, Hugo121, написать макрос так чтобы его достаточно было вставить в лист/исходный текст (конечно имя файла вместо C:\тест.xls я напишу, кстати как быть если этих файлов несколько, писать через запитую? столбцом? нужны кавычки?) в общем если можешь дай заготовку полную!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36405433
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаешь кнопку, правым мышом -> Назначить макрос (у меня View Code), туда вставляешь текст


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест1.xls", Type:=xlExcelLinks

    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест2.xls", Type:=xlExcelLinks

    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест3.xls", Type:=xlExcelLinks
Должно получиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub CommandButton1_Click()
    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест1.xls", Type:=xlExcelLinks

    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест2.xls", Type:=xlExcelLinks

    ActiveWorkbook.UpdateLink Name:= _
        "C:\тест3.xls", Type:=xlExcelLinks
End Sub

Хотя я сам такого не делал (разве что сегодня начало кода сгенерил), так что испытывать тебе :)
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36406182
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121, сделал все как ты написал, но результат пока не получился. Все исходники в прикрепленном файле - можешь посмотреть в чем неточность!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36406325
_Boroda_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TopTin,

Нужно положить файл "Второй" в D:\E_M\Взаимод_ДОРЭ\Для инета\, в файле "Взаимодействие5_Проба вне лок_сети" в ячейке D3 написать формулу ='D:\E_M\Взаимод_ДОРЭ\Для инета\[Второй.xls]Лист1'!$B$1, а потом уже запускать макрос. А у тебя в D3 совсем другой путь для ссылки.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36406682
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Boroda_, Все сделал как написано. Что интересно когда проверяю связи с книгой вне локальной сети т.е. адрес короткий "='D:\E_M\Взаимод_ДОРЭ\Для инета\[Второй.xls]" вроде бы работает (т.е. однозначно проверить не могу, т.к. это не локальная сеть то я сам меняю данные в файле "Второй" и они тут же без обновления изменяются и в файле сводный, т.е. как таковая кнопка обновления не нужна), а вот когда решил проверить обновления в лок.сети, т.е. адрес длинный "='\\10.2.62.125\folders\Департамент ОРЭ\ОСР\Ежедневное сопровождение рынка\1 заявки АТС\заявки ТЭУ\[Заявки ТЭУ 2010 ЯНВАРЬ.xls]1'!$A$100" - появляется ошибка следующая "Run-time error `1004`, Method `UpdateLink` of object`_Workbook` failed!". Результат практического применения в прикрепленном файле.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36406760
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте так написать:
Код: plaintext
1.
ActiveWorkbook.UpdateLink Name:= _
"\\10.2.62.125\folders\Департамент ОРЭ\ОСР\Ежедневное сопровождение рынка\1 заявки АТС\заявки ТЭУ\Заявки ТЭУ 2010 ЯНВАРЬ.xls"
В моём примере адресов ячеек небыло. Я тут проверил по сети, так у меня работает. Правда все пути без пробелов и без кириллицы.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36406765
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. у Вас адресов тоже нет в коде, но вот квадратные скобки есть.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36407516
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121, все ok (вроде все работает). Вопрос, если у меня ссылок немало, мне их придётся всегда прописывать сначала в книгу потом в макрос обновления (т.е. тот о котором речь в ветке и идет), а возможно просто установить связи и сделать макрос который сам бы подставил написание связей в другой макрос (макрос обновления) ведь в командных кнопках Excel в разделе "Правка/Связь" после установления связи с другой книгой появляется название установленных связей, может они где-то хранятся и их можно макросом брать и вставлять в макрос обновления?!
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36407841
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ссылки постоянно меняются, тогда даже не знаю, как автоматизировать. Вообще-то можно макрос програмно формировать и вставлять в файл, но надо разбираться.
Но если это надо корректировать нечасто, я бы сделал так:
1. Вообще надо только выбрать полные пути к файлам, а не к каждой ячейке, вряд ли файлов будет очень много.
2. На листе жмём Ctrl+~`, выделяем нужный диапазон, копируем уже формулы в Ворд/Блокнот
3. Вручную сортируем по алфавиту, убираем [] и адреса ячеек, дополняем текст до "пути к файлам" и после. Можно это и в Экселе делать, заменив = например на xyzxyz. Затем поменять назад, уже в редакторе VBA
4. Примерно так, имхо немного работы, если руку набить
Хотя если в формулах есть действия с значениями из этих книг, будет посложнее...
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36407846
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopTin, вот нашел макрос который обновляет все связи.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
'http://www.sql.ru/forum/actualthread.aspx?tid=423077&hl=activeworkbook+updatelink+name#4075679
'
'Deggasad
'Если можно не обновлять недоступные файлы, а оставить старые цифры то удали из модуля эти строки:
'       Else
'         x = Split(fname, "\")
'         fnput = Replace(fname, x(UBound(x)), "[" & x(UBound(x)) & "]")
'         For Each Sh In ActiveWorkbook.Sheets
'           Sh.Cells.Replace What:=fnput, Replacement:=fnput, LookAt:=xlPart
'         Next Sh


Private Function FileExists3(fname) As Boolean
    Set filesys = CreateObject("scripting.filesystemobject")
    FileExists3 = filesys.FileExists(fname)
End Function

Sub UpdLink()

Application.DisplayAlerts = False
aLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(aLinks) Then
    For i =  1  To UBound(aLinks)
     fname = aLinks(i)
     If FileExists3(fname) = True Then
       ActiveWorkbook.UpdateLink Name:=fname
'       Else
'         x = Split(fname, "\")
'         fnput = Replace(fname, x(UBound(x)), "[" & x(UBound(x)) & "]")
'         For Each Sh In ActiveWorkbook.Sheets
'           Sh.Cells.Replace What:=fnput, Replacement:=fnput, LookAt:=xlPart
'         Next Sh
      
     End If
    Next i
End If
Application.DisplayAlerts = True

End Sub
Весь этот код лучше всего вставить в модуль личной книги макросов.
Чтобы создать такую книгу нужно:
- Сервис - Маркос - Начать запись - Сохранить в личной книге макросов - ОК - остановить запись.
Дальше:
Нажать Альт + F11.
появится окно редактора ВБА
Войти в Модуль1
Скопировать туда код
закрыть ВБА
Дальше:
На панели инструментов щелкнуть правой кнопкой мыша.
выбрать
настройки - Команды - макросы - настраиваемая кнопка.
взять эту кнопку мышью и перетащить на удобное место любой панели.
не закрывая окна настройки кликнуть по новой кнопке правой мышкой.
выбрать макрос... выбираем макрос с именем UpdLink
потом настраиваем кнопку как нравица (название, быстрые клавиши, картинки на кнопке)
закрываем окно настройки.

теперь имеем кнопку, при нажатии на которую в активной книге будут обновлены все связи.
...
Рейтинг: 0 / 0
Взаимодействие одной книги эксель с другой
    #36407999
TopTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121, не много понял из написано.. есть возможность показать на примере прикрепленного файла?
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Взаимодействие одной книги эксель с другой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]