【发布时间】:2018-08-13 15:53:50
【问题描述】:
我正在尝试通过调用另一个宏来解锁工作表以允许 RFID 阅读器扫描和输入数据,然后再次保护文档以使其不被编辑,从而使宏运行。
Private Sub Worksheet_Change(ByVal Target As Range)
' call another macro
Call UnProtect
' End Sub
' Dim i As Integer
' MsgBox (Target.Row & ":" & Target.Column)
' For i = 8 To 200
If Target.Column = 3 And Target.Row <= 12 Then
If Cells(Target.Row, Target.Column).Value <> "" And Cells(Target.Row, "E").Value = "" Then
' Cells(Target.Row, "E").Value = Now()
' Cells(Target.Row, "E").NumberFormat = "h:mm AM/PM"
End If
End If
' Next
' Range("E:E").EntireColumn.AutoFit
' End Sub
' Private Sub Worksheet_Change(ByVal Target As Range)
' Dim i As Integer
' MsgBox (Target.Row & ":" & Target.Column)
' For i = 8 To 200
If Target.Column = 1 And Target.Row <= 17 Then
If Cells(Target.Row, Target.Column).Value <> "" And Cells(Target.Row, "B").Value = "" Then
Cells(Target.Row, "B").Value = Now()
' Cells(Target.Row, "F").NumberFormat = "h:mm AM/PM"
End If
End If
' Next
' Range("F:F").EntireColumn.AutoFit
' End Sub
' Private Sub Worksheet_Change(ByVal Target As Range)
' Dim i As Integer
' MsgBox (Target.Row & ":" & Target.Column)
' For i = 8 To 200
If Target.Column = 3 And Target.Row >= 15 Then
If Cells(Target.Row, Target.Column).Value <> "" And Cells(Target.Row, "D").Value = "" Then
Cells(Target.Row, "D").Value = Now()
Cells(Target.Row, "D").NumberFormat = "mm/dd/yyy"
End If
End If
' Next
Range("D:D").EntireColumn.AutoFit
' End Sub
' call another macro
Call Protect
End Sub
它调用的两个宏是
Sub UnProtect()
'Unprotect a worksheet
Sheets("Sign in Sheet").UnProtect
End Sub
和
Sub Protect()
'Protect a worksheet
Sheets("Sign in Sheet").Protect
End Sub
但是,当我只包含解锁宏时,代码可以正常工作。但是当我添加保护宏时,会出现错误代码
运行时错误“1004”: 无法设置 Range 类的 NumberFormat 属性
它指向
Cells(Target.Row, "D").NumberFormat = "mm/dd/yyyy"
关于到底发生了什么的任何想法。
【问题讨论】:
-
你考虑过this吗?
-
我没有看到针对 Target 不仅仅是一个单元格并且 Worksheet_Change 尝试在自身之上运行的情况的规定。
-
@jeeped 效果很好,谢谢。它是否必须在每次打开文档时运行,并且即使它受到保护,我也可以允许编辑范围。
-
a) 不,您只需使用 UserInterfaceOnly:=true 参数保护它一次,但如果您出于某种原因取消保护它,则需要使用 UserInterfaceOnly:=true 参数再次保护它。 b) 这就是单元格 Locked 属性的用途。