У меня есть основная книга Excel, над которой у меня работают пользователи. Функция этой рабочей книги Excel заключается в копировании и создании другой рабочей книги с использованием макросов. Эта копия находится на сетевом диске, где каждый может получить к нему доступ. Проблема в том, что если кто-то скопировал эту версию на свой рабочий стол, а затем я придумаю новую версию этой основной рабочей книги, то старая версия, которую человек скопировал на свой рабочий стол, не будет иметь последних обновлений макросов и т.д. , Есть ли способ проверить или запретить старому запускать макросы или запустить старую книгу?
1 ответ
Шаг 1: Вы можете написать макрос, который будет проверять основной файл в сетевом расположении. Вы можете использовать Dir
или FSO
для этого:
Dir:
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
FSO:
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
Рекомендации: