【问题标题】:locking cells based on text基于文本锁定单元格
【发布时间】:2014-01-02 22:04:14
【问题描述】:

我真的是 VBA 新手,如果通过“数据验证”从列表中选择某个文本,我会尝试锁定单元格。 我不断收到错误“运行时错误'424':需要对象。 我收到此代码错误; 如果 Application.Intersect(Target, Range("B7,b1000")) 什么都没有,那么, 我在这里做错了什么

Sub Locking2()
'
' Locking2 Macro
'Private Sub Worksheet_Change(ByVal Target As Range)

Const csPASSWORD As String = "tndppp"
'--
If Application.Intersect(Target, Range("B7,b1000")) Is Nothing Then
Exit Sub ' Do Nothing
End If

'--
''' 'B7:B1000' has been changed '''
' Unprotect sheet
ActiveSheet.Unprotect_
ActiveSheet.Unprotect Password:=csPASSWORD
With Range("b8:b1000")
If UCase(Range("B7,b1000").Value) = "PP" Then
' Lock 'E7:N1000'
.Locked = True
Else
' Unlock 'E7:N1000'
.Locked = False
End If
End With
'--
'Protect sheet
ActiveSheet.Protect _
Password:=csPASSWORD, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True

End Sub

【问题讨论】:

  • 你还没有在你的代码中定义target

标签: vba excel excel-2010


【解决方案1】:

您尚未在 Locking2 函数中定义 Target。你可以这样做:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Application.Intersect(Target, Range("B7:b1000")) Is Nothing Then
       Call Locking2(Target)
   End If
End Sub

Sub Locking2(ByVal Target As Range)
   Const csPASSWORD As String = "tndppp"

   ' Unprotect sheet
   ActiveSheet.Unprotect Password:=csPASSWORD
   ActiveSheet.Cells.Locked = False
   With Range("E7:N1000")
      allPP = True
      For Each r In Range("B7:b1000")
          If UCase(r.Value) <> "PP" Then
              allPP = False
              Exit For
          End If
      Next
      If allPP Then
         ' Lock 'E7:N1000'
         .Locked = True
      Else
         ' Unlock 'E7:N1000'
         .Locked = False
      End If
  End With

 'Protect sheet
  ActiveSheet.Protect _
    Password:=csPASSWORD, _
    DrawingObjects:=True, _
    Contents:=True, _
    Scenarios:=True
End Sub

此更改应修复错误

【讨论】:

  • 应该这样吗?
  • Private Sub Worksheet_Change(ByVal Target As Range) Call Sub Locking2(Target) End Sub Sub Locking2(ByVal Target As Range) Const csPASSWORD As String = "tndppp" '-- If Application.Intersect(Target , Range("B7,b1000")) Is Nothing Then Exit Sub ' Do nothing End If
  • 我刚刚尝试过,但出现错误。编译错误:预期:标识符
  • 你在哪一行得到的?
  • 第二行。调用 Sub Locking2(目标)。高亮SUB然后提示错误
猜你喜欢
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
相关资源
最近更新 更多