Блокируйте ИСПОЛЬЗОВАННЫЕ клетки каждый час или 30 минут - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть файл, который используется многими людьми. Они вводят данные время от времени. Я заблокировал и разблокировал ячейки, чтобы люди могли вводить данные, но не возиться с сгенерированными данными (например, временем). У меня есть код, который блокирует ячейку после каждого ввода, но затем, если кто-то введет неправильные данные, он не может быть отменен, если меня нет рядом.

Поэтому я решил создать код VBA, чтобы блокировать все ИСПОЛЬЗУЕМЫЕ ячейки каждые Х минут (поэтому, если кто-то совершит ошибку, чтобы исправить это), но не знаю, как выполнить протокол минут.

Я нашел этот хороший код для блокировки используемых ячеек:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
'Resume to next line if any error occurs
 Dim Cell As Range
 With ActiveSheet
 'first of all unprotect the entire
 'sheet and unlock all cells
 .Unprotect Password:=""
 .Cells.Locked = False
 'Now search for non blank cells
 'and lock them and unlock blank cells
 For Each Cell In ActiveSheet.UsedRange
 If Cell.Value = "" Then
 Cell.Locked = False
 Else
 Cell.Locked = True
 End If
 Next Cell
 .Protect Password:=""
 'Protect with blank password, you can change it
 End With
Exit Sub
End Sub

Единственное, что мне нужно, это добавить код для выполнения вышеуказанного каждые 30 минут или 1 час. Не знаю, будет ли Sub для этого значения Sub Workbook_BeforeSave или AfterSave, так как после каждой записи файл сохраняется автоматически или должен быть похож на модуль.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 февраля 2020

Спасибо, Рикардо.

Мне удается создать это:

Private Sub save_cells()
On Error Resume Next
'Resume to next line if any error occurs
 Dim Cell As Range
 With ActiveSheet
 'first of all unprotect the entire
 'sheet and unlock all cells
 .Unprotect Password:="0"
 .Cells.Locked = False
 'Now search for non blank cells
 'and lock them and unlock blank cells
 For Each Cell In ActiveSheet.UsedRange
 If Cell.Value = "" Then
 Cell.Locked = False
 Else
 Cell.Locked = True
 End If
 If Cell.HasFormula Then
Cell.Locked = True
Cell.FormulaHidden = True
End If
 Next Cell
 .Protect Password:="0"
 'Protect with blank password, you can change it
 End With
 Application.SendKeys "{RIGHT}{LEFT}"
 Call savetimer
Exit Sub
End Sub

 Sub savetimer()
    Application.OnTime TimeValue("23:15:30"), "save_cells"
End Sub

Единственная проблема, с которой я столкнулся сейчас, заключается в том, что код сканирует все строки и замедляет работу моего файла. когда я кладу его в замок каждые 15 минут или около того. По этой причине я решил заблокировать камеры один раз в день.

Если у кого-то есть идея, как изменить код для сканирования только A3: O600, было бы здорово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...