Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Проверка более новой версии рабочей книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка более новой версии рабочей книги (Макросы/Sub)
Проверка более новой версии рабочей книги
ZamoK Дата: Вторник, 19.05.2015, 08:53 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Доброго дня!
Книга имеет большой размер и работать по сети нескольким пользователям не удаётся, поэтому пользователь скачивает себе рабочую версию и работает с книгой локально. Я же в свою очередь слежу за достоверностью данных в этой книге (вношу дополнения и изменения). В книге имеется ячейка с датой последнего обновления (q1).
Вопрос таков: Можно ли по средствам VBA сделать проверку при открытии более свежей версии книги если исходник расположен :\\192.168.111.112\files именно опираясь на ячейку с датой последнего обновления Q1. (Типа всплывающее окошко - Имеется более поздняя версия!)
Если есть каките-то более хитрые способы реализации данного вопроса - это будет очень хорошо, в виду моего скудного познания EXCEL.
Мне конечно не сложно кинуть книгу на сервер и оббежать два десятка человек чтоб обновить эту книгу у них. (даже этого они не делают т.к. компютер для них - это космичекий аппарат )))), но немного утомляет. Спасибо.


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 19.05.2015, 10:24
 
Ответить
СообщениеДоброго дня!
Книга имеет большой размер и работать по сети нескольким пользователям не удаётся, поэтому пользователь скачивает себе рабочую версию и работает с книгой локально. Я же в свою очередь слежу за достоверностью данных в этой книге (вношу дополнения и изменения). В книге имеется ячейка с датой последнего обновления (q1).
Вопрос таков: Можно ли по средствам VBA сделать проверку при открытии более свежей версии книги если исходник расположен :\\192.168.111.112\files именно опираясь на ячейку с датой последнего обновления Q1. (Типа всплывающее окошко - Имеется более поздняя версия!)
Если есть каките-то более хитрые способы реализации данного вопроса - это будет очень хорошо, в виду моего скудного познания EXCEL.
Мне конечно не сложно кинуть книгу на сервер и оббежать два десятка человек чтоб обновить эту книгу у них. (даже этого они не делают т.к. компютер для них - это космичекий аппарат )))), но немного утомляет. Спасибо.

Автор - ZamoK
Дата добавления - 19.05.2015 в 08:53
SLAVICK Дата: Вторник, 19.05.2015, 11:17 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Я пользуюсь такой функцией:
[vba]
Код
Function инфо(fil$, Optional n = -1) As String
Dim f, p
      If Dir(fil) = "" Then инфо = "No file exists": Exit Function
      f = Dir(fil)
      p = Left(fil, Len(fil) - Len(f))
      With CreateObject("shell.application").Namespace(p)
      инфо = (.getdetailsof(.Items.Item(f), n))
      End With
End Function
[/vba]
Чтобы узнать дату создания файла нужно ввести формулу:
Код
=инфо(A2;5)*1

Ну а дальше сравнивайте с имеющейся ячейкой ;)

Для разных ОС константа "5" может отличатся(попробуйте, если не то показывает заменить "5" на другую цифру) - у меня windows 7.
К сообщению приложен файл: 4204035.xlsm (15.9 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Вторник, 19.05.2015, 11:19
 
Ответить
СообщениеЯ пользуюсь такой функцией:
[vba]
Код
Function инфо(fil$, Optional n = -1) As String
Dim f, p
      If Dir(fil) = "" Then инфо = "No file exists": Exit Function
      f = Dir(fil)
      p = Left(fil, Len(fil) - Len(f))
      With CreateObject("shell.application").Namespace(p)
      инфо = (.getdetailsof(.Items.Item(f), n))
      End With
End Function
[/vba]
Чтобы узнать дату создания файла нужно ввести формулу:
Код
=инфо(A2;5)*1

Ну а дальше сравнивайте с имеющейся ячейкой ;)

Для разных ОС константа "5" может отличатся(попробуйте, если не то показывает заменить "5" на другую цифру) - у меня windows 7.

Автор - SLAVICK
Дата добавления - 19.05.2015 в 11:17
Manyasha Дата: Вторник, 19.05.2015, 12:08 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Вот еще вариант:[vba]
Код
Function lastSave() As Date
      lastSave = FileDateTime(ActiveWorkbook.FullName)
End Function
[/vba]
Можно пройтись по всем файлам, например в текущей папке, и выцепить самый новый файл (который сохранили позже всех):[vba]
Код
Sub test()
      Dim MyPath As String, myname As String, lastFile As String
      Dim fTime As Date
      MyPath = ThisWorkbook.Path & "\"
      myname = Dir(MyPath, vbDirectory)
      fTime = FileDateTime(ThisWorkbook.FullName)
      lastFile = ThisWorkbook.Name
      Do While myname <> ""
          If myname <> "." And myname <> ".." And myname <> ThisWorkbook.Name Then
              If fTime < FileDateTime(MyPath & myname) Then fTime = FileDateTime(MyPath & myname): lastFile = myname
          End If
          myname = Dir
      Loop
      MsgBox "Самый новый файл в папке: " & lastFile & vbCr & "Время сохранения: " & fTime
End Sub
[/vba]
К сообщению приложен файл: primer.xlsm (17.1 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеВот еще вариант:[vba]
Код
Function lastSave() As Date
      lastSave = FileDateTime(ActiveWorkbook.FullName)
End Function
[/vba]
Можно пройтись по всем файлам, например в текущей папке, и выцепить самый новый файл (который сохранили позже всех):[vba]
Код
Sub test()
      Dim MyPath As String, myname As String, lastFile As String
      Dim fTime As Date
      MyPath = ThisWorkbook.Path & "\"
      myname = Dir(MyPath, vbDirectory)
      fTime = FileDateTime(ThisWorkbook.FullName)
      lastFile = ThisWorkbook.Name
      Do While myname <> ""
          If myname <> "." And myname <> ".." And myname <> ThisWorkbook.Name Then
              If fTime < FileDateTime(MyPath & myname) Then fTime = FileDateTime(MyPath & myname): lastFile = myname
          End If
          myname = Dir
      Loop
      MsgBox "Самый новый файл в папке: " & lastFile & vbCr & "Время сохранения: " & fTime
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 19.05.2015 в 12:08
ZamoK Дата: Вторник, 19.05.2015, 13:00 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Спасибо за отклики. Не думал что так быстро найдутся решения.
Оба варианта где-то рядом, может я как-то криво объяснил - пардоньте. Вариант SLAVICK, в принципе оч хорош! но у мя проблемка (КАК?)
Ну а дальше сравнивайте с имеющейся ячейкой
дата актуальности текущего документа в ячейке Q1 а дата исходника получилась в V11 и если исходник позже, то такое вот бы сообщение подписать [vba]
Код
MsgBox "Имеется более поздняя версия!", , ""
[/vba]
А в идеале при нажатии кнопки ОК произошла бы замена книги, или что-то подобное, но тут навено я уже размечтался, т.к. для замены надо закрыть книгу, запустить процесс копирования, и опять открыть, а из под VBA такой процесс к сожалению запустить нельзя. Или я ошибась т.к. слабоват :D


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 19.05.2015, 13:02
 
Ответить
СообщениеСпасибо за отклики. Не думал что так быстро найдутся решения.
Оба варианта где-то рядом, может я как-то криво объяснил - пардоньте. Вариант SLAVICK, в принципе оч хорош! но у мя проблемка (КАК?)
Ну а дальше сравнивайте с имеющейся ячейкой
дата актуальности текущего документа в ячейке Q1 а дата исходника получилась в V11 и если исходник позже, то такое вот бы сообщение подписать [vba]
Код
MsgBox "Имеется более поздняя версия!", , ""
[/vba]
А в идеале при нажатии кнопки ОК произошла бы замена книги, или что-то подобное, но тут навено я уже размечтался, т.к. для замены надо закрыть книгу, запустить процесс копирования, и опять открыть, а из под VBA такой процесс к сожалению запустить нельзя. Или я ошибась т.к. слабоват :D

Автор - ZamoK
Дата добавления - 19.05.2015 в 13:00
ZamoK Дата: Вторник, 19.05.2015, 13:12 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
В приципе вариант Manyasha, тоже оч неплох. Если место поиска выделить \\192.168.111.112\files и дату в ячейке (в моём случае) Q1 сравнить с датой самого нового файла и при не совпадении выдавать сообщение[vba]
Код
MsgBox "Есть более новый файл: " & lastFile & vbCr & "Время сохранения: " & fTime
[/vba]
Да и выполнялось бы это при открытии, в фоне, а окно появлялось бы только при выполении условия.


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеВ приципе вариант Manyasha, тоже оч неплох. Если место поиска выделить \\192.168.111.112\files и дату в ячейке (в моём случае) Q1 сравнить с датой самого нового файла и при не совпадении выдавать сообщение[vba]
Код
MsgBox "Есть более новый файл: " & lastFile & vbCr & "Время сохранения: " & fTime
[/vba]
Да и выполнялось бы это при открытии, в фоне, а окно появлялось бы только при выполении условия.

Автор - ZamoK
Дата добавления - 19.05.2015 в 13:12
ZamoK Дата: Вторник, 19.05.2015, 13:16 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Эх сам бы написал что-то подобное, да вот руки не заточены, и знать бы, что это там за раскривушки %)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеЭх сам бы написал что-то подобное, да вот руки не заточены, и знать бы, что это там за раскривушки %)

Автор - ZamoK
Дата добавления - 19.05.2015 в 13:16
SLAVICK Дата: Вторник, 19.05.2015, 13:18 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Тут всего одну строку нужно:
[vba]
Код
  Sub d()
     If [v11].Value > [q11].Value Then MsgBox "Имеется более поздняя версия!"
     End Sub
[/vba]

На счет копировать:
смотрите здесь
Или здесь

Или ложите примеры в архив. B)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеТут всего одну строку нужно:
[vba]
Код
  Sub d()
     If [v11].Value > [q11].Value Then MsgBox "Имеется более поздняя версия!"
     End Sub
[/vba]

На счет копировать:
смотрите здесь
Или здесь

Или ложите примеры в архив. B)

Автор - SLAVICK
Дата добавления - 19.05.2015 в 13:18
ZamoK Дата: Вторник, 19.05.2015, 13:36 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Куда дописать чтоб при открытии срабатывал?


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 19.05.2015, 13:36
 
Ответить
СообщениеКуда дописать чтоб при открытии срабатывал?

Автор - ZamoK
Дата добавления - 19.05.2015 в 13:36
SLAVICK Дата: Вторник, 19.05.2015, 13:46 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
В модуль книги на "открытие" т.е.
[vba]
Код
Private Sub Workbook_Open()
[/vba]

А вообще дальнейшее обсуждение без примеров противоречит правилам форума... deal
Вы начали вроде с общего вопроса, а сейчас хотите без примера, чтобы решали конкретную задачу.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеВ модуль книги на "открытие" т.е.
[vba]
Код
Private Sub Workbook_Open()
[/vba]

А вообще дальнейшее обсуждение без примеров противоречит правилам форума... deal
Вы начали вроде с общего вопроса, а сейчас хотите без примера, чтобы решали конкретную задачу.

Автор - SLAVICK
Дата добавления - 19.05.2015 в 13:46
ZamoK Дата: Вторник, 19.05.2015, 14:12 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Чето не работает :(
К сообщению приложен файл: 8661911.xls (33.0 Kb)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеЧето не работает :(

Автор - ZamoK
Дата добавления - 19.05.2015 в 14:12
SLAVICK Дата: Вторник, 19.05.2015, 14:28 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Для этого и нужен пример :D
Вы не туда вставили макрос.
К сообщению приложен файл: 4831089.xls (50.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеДля этого и нужен пример :D
Вы не туда вставили макрос.

Автор - SLAVICK
Дата добавления - 19.05.2015 в 14:28
ZamoK Дата: Вторник, 19.05.2015, 14:43 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
О заработало Спасибо!!!
Пока поюзаю ссылочки сверху там что-то интересное, может приклею что?


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеО заработало Спасибо!!!
Пока поюзаю ссылочки сверху там что-то интересное, может приклею что?

Автор - ZamoK
Дата добавления - 19.05.2015 в 14:43
ZamoK Дата: Вторник, 19.05.2015, 14:58 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Оп а не работает!!!
Ему всеровно какая дата от все ровно сообщение выдаёт :o
К сообщению приложен файл: 8956176.xls (43.0 Kb)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеОп а не работает!!!
Ему всеровно какая дата от все ровно сообщение выдаёт :o

Автор - ZamoK
Дата добавления - 19.05.2015 в 14:58
Manyasha Дата: Вторник, 19.05.2015, 18:50 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
SLAVICK, у Вас там опечатка: [v11].Value > [q11], нужно [v11].Value > [q1] :)
ZamoK, можно еще в функцию добавить [vba]
Код
Application.Volatile
[/vba]и при открытии книги[vba]
Код
Sheets(1).Calculate
[/vba]тогда формула инфо() будет обновляться при открытии.

Кстати, .getdetailsof почему-то не возвращает секунды, из-за этого заметила некорректную работу макроса, когда оба файлы сохранены в одну минуту.
Функция FileDateTime работает нормально.
К сообщению приложен файл: 8956176_1.xls (61.0 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеSLAVICK, у Вас там опечатка: [v11].Value > [q11], нужно [v11].Value > [q1] :)
ZamoK, можно еще в функцию добавить [vba]
Код
Application.Volatile
[/vba]и при открытии книги[vba]
Код
Sheets(1).Calculate
[/vba]тогда формула инфо() будет обновляться при открытии.

Кстати, .getdetailsof почему-то не возвращает секунды, из-за этого заметила некорректную работу макроса, когда оба файлы сохранены в одну минуту.
Функция FileDateTime работает нормально.

Автор - Manyasha
Дата добавления - 19.05.2015 в 18:50
SLAVICK Дата: Среда, 20.05.2015, 09:24 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
SLAVICK, у Вас там опечатка: [v11].Value > [q11], нужно [v11].Value > [q1]

А Вы файл из моего последнего поста смотрели? :D
Я там это исправил, и Calculate тоже добавлял B)
Похоже ZamoK, немного откорректировал код yes
Кстати, .getdetailsof почему-то не возвращает секунды

Согласен, но мне этого хватает. Удобство этой функции в том, что можно получить не только дату изменения файла, но и много другой полезной инфы:
Дата создания
Автор
Размер ....
Для этого достаточно просто поменять второй параметр функции B)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
SLAVICK, у Вас там опечатка: [v11].Value > [q11], нужно [v11].Value > [q1]

А Вы файл из моего последнего поста смотрели? :D
Я там это исправил, и Calculate тоже добавлял B)
Похоже ZamoK, немного откорректировал код yes
Кстати, .getdetailsof почему-то не возвращает секунды

Согласен, но мне этого хватает. Удобство этой функции в том, что можно получить не только дату изменения файла, но и много другой полезной инфы:
Дата создания
Автор
Размер ....
Для этого достаточно просто поменять второй параметр функции B)

Автор - SLAVICK
Дата добавления - 20.05.2015 в 09:24
Manyasha Дата: Среда, 20.05.2015, 10:51 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Я там это исправил,

Да, извините, смотрела последний файл, выложенный ZamoK в 13-м сообщении.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
Я там это исправил,

Да, извините, смотрела последний файл, выложенный ZamoK в 13-м сообщении.

Автор - Manyasha
Дата добавления - 20.05.2015 в 10:51
ZamoK Дата: Среда, 20.05.2015, 13:07 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Manyasha, SLAVICK, Огромное спасибо учел все замечания и советы все чудесно.

Вот только вопрос: =ИНФО... , =lastSave выдают одну и ту же информацию, чем они отличаются?


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Среда, 20.05.2015, 13:08
 
Ответить
СообщениеManyasha, SLAVICK, Огромное спасибо учел все замечания и советы все чудесно.

Вот только вопрос: =ИНФО... , =lastSave выдают одну и ту же информацию, чем они отличаются?

Автор - ZamoK
Дата добавления - 20.05.2015 в 13:07
SLAVICK Дата: Среда, 20.05.2015, 13:41 | Сообщение № 18
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
=ИНФО... , =lastSave выдают одну и ту же информацию, чем они отличаются

ИНФО и lastSave - названия UDF функций - они получают информацию разными способами.

lastSave - через встроенную в vba функцию FileDateTime.
а инфо через "shell.application".

Информация одинаковая(кроме секунд) - "shell.application" берет только до минут.
Но через "shell.application" можно узнать намного больше чем просто дата изменения. :
'n = 0-Имя,1-Размер,2-Тип,3-Изменен,4-Дата создания,5-Открыт
'n = 6-Атрибуты,7-Состояние,8-Владелец,9-Автор,10-Заголовок
'n = 11-Тема,12-Категория,13-Страницы,14-Комментарий
Детальнее здесь
Поэтому я пользуюсь ею. Так как можно в два клика получить разную инфу.
А вообще кому что удобно - тот тем методом и пользуется :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 20.05.2015, 15:30
 
Ответить
Сообщение
=ИНФО... , =lastSave выдают одну и ту же информацию, чем они отличаются

ИНФО и lastSave - названия UDF функций - они получают информацию разными способами.

lastSave - через встроенную в vba функцию FileDateTime.
а инфо через "shell.application".

Информация одинаковая(кроме секунд) - "shell.application" берет только до минут.
Но через "shell.application" можно узнать намного больше чем просто дата изменения. :
'n = 0-Имя,1-Размер,2-Тип,3-Изменен,4-Дата создания,5-Открыт
'n = 6-Атрибуты,7-Состояние,8-Владелец,9-Автор,10-Заголовок
'n = 11-Тема,12-Категория,13-Страницы,14-Комментарий
Детальнее здесь
Поэтому я пользуюсь ею. Так как можно в два клика получить разную инфу.
А вообще кому что удобно - тот тем методом и пользуется :D

Автор - SLAVICK
Дата добавления - 20.05.2015 в 13:41
ZamoK Дата: Среда, 20.05.2015, 14:23 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Большое спасибо за проведенный ликбез.


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеБольшое спасибо за проведенный ликбез.

Автор - ZamoK
Дата добавления - 20.05.2015 в 14:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка более новой версии рабочей книги (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!