Vba 以列中的数据输入为条件保护版本允许范围内的行
下午好, 我的工作表受密码保护,用户只允许编辑由单元格Vba 以列中的数据输入为条件保护版本允许范围内的行,vba,excel,Vba,Excel,下午好, 我的工作表受密码保护,用户只允许编辑由单元格C19:G23和C32:L70组成的范围。 我需要创建一个VBA来验证是否在上述范围内的C列中的任何行中输入了数据,在输入数据的行的B列中写入单词“Ok”,并保护这些行以供进一步编辑。换句话说,我需要根据C列中输入的数据修改/覆盖版本允许范围。 在过去的两天里,我尝试了几种方法,包括下面的私人sub,它是从这里找到的另一个答案中选取的,经过了一些修改,但都不起作用 Private Sub Worksheet_Change(ByVal Targ
C19:G23
和C32:L70
组成的范围。
我需要创建一个VBA来验证是否在上述范围内的C列中的任何行中输入了数据,在输入数据的行的B列中写入单词“Ok”,并保护这些行以供进一步编辑。换句话说,我需要根据C列中输入的数据修改/覆盖版本允许范围。
在过去的两天里,我尝试了几种方法,包括下面的私人sub,它是从这里找到的另一个答案中选取的,经过了一些修改,但都不起作用
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
Dim mypassword As String, StringToCheck As String
On Error GoTo Whoa
'~~> Change the password here to protect/unprotect the sheet
mypassword = "Maze"
'~~> Change it to the relevant string with which you want to compare
StringToCheck = "Ok"
If Not Intersect(Target, Range("C1:C70")) Is Nothing Then
'~~> Check for the cell value
If Target.Value = “Ok” Then
'~~> Un-Protect the sheet
ActiveSheet.Unprotect Squonk
'~~> Lock the cell
Range("A1:AAA50000").Locked = True
'~~> Re-Protect the sheet
ActiveSheet.Protect Squonk
End If
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
我不理解您问题的保护部分,但其余部分(我需要创建一个VBA,以验证是否在上述范围内的C列的任何行中输入了数据,在输入数据的行的B列中写入“Ok”一词)应通过以下代码完成:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("C1:C70")) Is Nothing And _
Intersect(Target, Range("C19:G23")) Is Nothing Then Exit Sub
Cells(Target.Row, 2) = "OK"
End Sub
诀窍是在3个条件下退出sub:
- 不止一个单元
- C1以外的目标:C70
- C19以外的目标:G23
然后使用
Target
的属性.Row
,在列“B”上写下“OK”。我从找到的一堆数据中得出了下面的结论,它工作得非常好。非常感谢你的帮助
Sub Test()
ActiveSheet.Unprotect Password:="Maze"
Dim mainworkBook As Workbook
Set mainworkBook = ActiveWorkbook
Application.ScreenUpdating = False
Dim lastRow As Long
Dim cell As Range
lastRow = Range("C" & Rows.Count).End(xlUp).Row
For Each cell In Range("C32:C70" & lastRow)
If InStr(1, cell.Value, "") <> 0 Then
cell.Offset(, -1).Value = "Ok"
End If
Next
Application.ScreenUpdating = True
ActiveSheet.Protect Password:="Maze"
End Sub
子测试()
ActiveSheet.Unprotect密码:=“迷宫”
将工作簿设置为工作簿
设置mainworkBook=ActiveWorkbook
Application.ScreenUpdating=False
最后一排一样长
暗淡单元格作为范围
lastRow=范围(“C”和Rows.Count).End(xlUp).Row
对于范围内的每个单元格(“C32:C70”和lastRow)
如果InStr(1,单元格值“”)为0,则
单元格偏移量(,-1).Value=“确定”
如果结束
下一个
Application.ScreenUpdating=True
ActiveSheet.Protect密码:=“迷宫”
端接头
非常感谢您的快速回答,维塔亚。我将试着解释furhter。@Haellion-锁定和解锁部分应该在您知道该怎么做后很容易完成。Excel上有一个名为“允许用户编辑范围”的资源,位于“更改”部分(Excel 2016)下的“审阅”选项卡上。它允许保护整个表单,但在第二个密码的保护下为编辑留下一个范围。这是我的范围(C19:G23和C32:L70)。我以前试过这个代码,但它不太管用。此外,我意识到我需要用一个按钮来触发它,让用户编辑范围的其余部分,而不仅仅是C列。有没有办法用一个公共sub?Haellion-只需在执行时录制一个宏。Vityata,我试过了,但我必须为每行重新创建一个宏,并为每个宏创建一个按钮。这将是非常麻烦的,更不用说,用户将无法使用超过1线的时间。我需要能够在范围内编辑我想要的任意多行,然后点击按钮操作宏,因为这些行将被添加并导出到另一张工作表,并根据B列上缺少“Ok”创建另一个文档。