我正在创建一个电子表格,供人们在完成某些事情后进入。我认为最有效的方法是使用双击勾选框。但是,我想为此提取用户ID和时间戳,并且不希望任何人能够编辑任何,除非他们是第一次双击某些内容。
我有下面的内容适用于我需要的内容,但我不知道如何完全按照自己的意愿保护这张纸。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Limit Target count to 1
If Target.Count > 1 Then Exit Sub
'Isolate Target to a specific range
If Intersect(Target, Range("Ckboxes")) Is Nothing Then Exit Sub
'Set Target font to "marlett"
Target.Font.Name = "marlett"
'Check value of target
If Target.Value <> "a" Then
Target.Value = "a" 'Sets target Value = "a"
Target.Offset(0, 1).Value = Environ("UserName")
Target.Offset(0, 2).Value = Format(Now, "yyyy-mm-dd hh:mm:ss")
Cancel = True
Exit Sub
End If
If Target.Value = "a" Then
Cancel = True
Exit Sub
End If
End Sub
此外,如果我保护列C和D,那么它将不会让宏输入所需的值。我知道我可能需要保护整个工作表并让它在双击时解锁单元格以允许更改发生,然后再次直接锁定但我无法弄清楚如何管理它!
感谢任何帮助!
答案 0 :(得分:0)
您可以做的是像往常一样保护工作表并放入复选框。然后将此宏指定给所有复选框 -
Sub ChkBxClk()
Dim shp As Shape
Set shp = ActiveSheet.Shapes(Application.Caller)
If shp.ControlFormat.Value = xlOff Then
MsgBox ("This was already checked off")
shp.ControlFormat.Value = xlOn
Exit Sub
End If
If shp.ControlFormat.Value = xlOn Then
ActiveSheet.Unprotect
Dim rng As Range
Set rng = Range(shp.TopLeftCell.Address)
rng.Offset(0, 1).value = Environ("UserName")
rng.Offset(0, 2).value = Format(Now, "yyyy-mm-dd hh:mm:ss")
ActiveSheet.Protect
End If
End Sub
现在,如果用户选中一个框(受保护的工作表上允许),它将解锁并允许您在偏移单元格中输入所需内容。