У меня есть основная книга Excel, с которой работают пользователи. Функция этой книги Excel — копировать и создавать другие книги с помощью макросов и т. д. Эта копия находится на сетевом диске, где к ней может получить доступ каждый. Проблема в том, что если кто-то скопировал эту версию на свой рабочий стол, а затем я позже создам новую версию этой основной книги, то старая, которую этот человек скопировал на свой рабочий стол, не будет иметь последних обновлений макросов и т. д. Есть ли способ проверить или запретить старой книге запускать макросы или заставить старую книгу работать?
решение1
Шаг 1:Вы можете написать макрос, который будет проверять наличие основного файла в сетевом расположении. Вы можете использовать Dir
или FSO
для этого:
Режиссёр:
Sub Test_File_Exist_With_Dir()
Dim FilePath As String
Dim TestStr As String
FilePath = "\\Server\test\book1.xlsm"
TestStr = ""
On Error Resume Next
TestStr = Dir(FilePath)
On Error GoTo 0
If TestStr = "" Then
MsgBox "File doesn't exist"
Else
MsgBox "File exist"
End If
End Sub
ФСО:
Sub Test_File_Exist_FSO_Late_binding()
'No need to set a reference if you use Late binding
Dim FSO As Object
Dim FilePath As String
Set FSO = CreateObject("scripting.filesystemobject")
FilePath = "\\Server\test\book1.xlsm"
If FSO.FileExists(FilePath) = False Then
MsgBox "file doesn't exist"
Else
MsgBox "File exist"
End If
End Sub
Sub Test_File_Exist_FSO_Early_binding()
'If you want to use the Intellisense help showing you the properties
'and methods of the objects as you type you can use Early binding.
'Add a reference to "Microsoft Scripting Runtime" in the VBA editor
'(Tools>References)if you want that.
Dim FSO As Scripting.FileSystemObject
Dim FilePath As String
Set FSO = New Scripting.FileSystemObject
FilePath = "\\Server\Ron\test\book1.xlsm"
If FSO.FileExists(FilePath) = False Then
MsgBox "File doesn't exist"
Else
MsgBox "File exist"
End If
End Sub
Шаг 2:Вы можете проверить дату последнего изменения этого файла, что может быть использовано для определения наличия более новой версии.
FileDateTime("\\Server\test\book1.xlsm")
Пример результата:01.06.2016 19:40:18
Шаг 3:Если существует более новая версия, вы можете отобразить окно сообщения для пользователя с просьбой скопировать новую версию с сетевого диска и закрыть книгу. (Я бы не рекомендовал автоматизировать копирование/вставку из сетевого расположения на рабочую станцию пользователя, поскольку это может легко привести к беспорядку, а без этого он все равно делает то, что нужно)
MsgBox "A new version of this file exists on the network share. Please use the new version. This workbook will now close."
ActiveWorkbook.Close savechanges:=False
Использованная литература: