Можно ли заблокировать файл Excel паролем с помощью VBA только для указания c даты / времени? - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я создаю управляемый макросами файл для Excel, где довольно большие объемы данных выгружаются через файлы .csv и перераспределяются на разные вкладки в соответствии с некоторыми правилами. (К сожалению, нет прямой ссылки на базу данных) Это происходит каждую пятницу до 12:00, а в это время - с 8:00 до 12:00, я бы хотел защитить файл паролем. Таким образом, только человек, ответственный за загрузку всех данных, может использовать этот файл.

Поскольку это общий файл, работающий в SharePoint с функцией автосохранения, многие люди хотят использовать его одновременно. Но Excel и общие функции не очень нравятся нескольким людям, когда макросы работают в фоновом режиме. Итак, могу ли я добавить MsgBox в Workbook.open () с информацией о том, что файл в настоящее время недоступен и для продолжения требуется пароль, если день == пятница, время между 8-12?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

спасибо Тиму Стэку за ответ - я немного изменил его для всех, кто интересуется будущим:

@ FaneDuru - событие должно вызываться упомянутым вами событием, потому что код работает на "ThisWorkbook "В Excel VBA это означает, что он вызывается каждый раз при открытии книги.

Option Explicit
Function unlockwb()
Dim pw

pw = "xxx"
' Unprotect WB structure
ThisWorkbook.Unprotect pw
' Unrotect sheet
Sheet1.Unprotect pw

End Function
Function lockwb()
Dim pw

pw = "xxx"
' Protect WB structure
ThisWorkbook.Protect pw, True, True
' Protect sheet
Sheet1.Protect pw

End Function
Sub Workbook_Open()

Dim weekdaylock, timelowerbound, timeupperbound, pw
pw = "xxx"

weekdaylock = vbFriday
If Weekday(Date) = weekdaylock Then
    lockwb
End If

timelowerbound = TimeValue("08:00:00")
timeupperbound = TimeValue("12:00:00")
' Or both
If Weekday(Date) = weekdaylock Then
    If timelowerbound < Time() And Time() < timeupperbound Then
        If InputBox("Please enter password to continue.", "Enter Password") <> pw Then
            MsgBox "Wrong Password"
            lockwb
            ThisWorkbook.Close
        Else
            unlockwb
        End If
    End If
End If
End Sub
0 голосов
/ 08 мая 2020

Да, это возможно.

Function unlockwb()

pw = "mypassword1"
' Unprotect WB structure
ThisWorkbook.Unprotect pw
' Unrotect sheet
Sheet1.Unprotect pw

End Function

Function lockwb()

pw = "mypassword1"
' Protect WB structure
ThisWorkbook.Protect pw, True, True
' Protect sheet
Sheet1.Protect pw

End Function

Sub LockOnTime()
'Unlock all, lock again if condition(s) is/are satisfied
unlockwb

' Lock by day of the week
weekdaylock = vbFriday
If Weekday(Date) = weekdaylock Then
    lockwb
End If

' Or lock by time
timelowerbound = TimeValue("11:00:00 AM")
timeupperbound = TimeValue("12:00:00 PM")
If timelowerbound < Time() And Time() < timeupperbound Then
    lockwb
End Sub

' Or both
If Weekday(Date) = weekdaylock Then
    If timelowerbound < Time() And Time() < timeupperbound Then
        lockwb
    End Sub
End If
...