2016-11-24 66 views
-1

看起来像我的代码有问题。但是,我无法解决问题。 我有2个工作簿选项卡。主表和子表。 在主工作表的下拉列表中选择“是”将启用子工作表。 在主工作表的下拉列表中选择“否”将禁用子工作表上的单元格。VBA代码未激活单元格

我的问题:当我选择“否”时,我没有看到任何工作表上的“活动单元格”。 Active Cell的意思是我们点击单元格时获得的绿色边框(截图附后)。在模块 enter image description here

守则主片

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
     If Not Intersect(Target, Range("R12")) Is Nothing Then 
      If Target.Value = "YES" Then 
       Call Enabler 
      Else 
       Call Disabler 
      End If 
     End If 
    Application.EnableEvents = True 
End Sub 

代码

Public Sub Disabler() 
    With ThisWorkbook.Sheets("SubSheet") 
     .Unprotect Password:="xyz" 
     .Range("E13:E14").Locked = True 
     .Protect Password:="xyz" 
    End With 
End Sub 

Public Sub Enabler() 
    With ThisWorkbook.Sheets("SubSheet") 
     .Unprotect Password:="xyz" 
     .Range("E13:E14").Locked = False 
     .Protect Password:="xyz" 
    End With 
End Sub 
+0

添加'ThisWorkbook.Sheets(“SubSheet”)。Activate' in'Sub Disabler()'和'Sub Enabler()'。 – Andy

+0

什么是您的excel版本? 。 – Andy

回答

0

类似下面应该为你工作...

Private Sub Worksheet_Change(ByVal Target As Range) 
On Error GoTo ExitSub 
    Application.EnableEvents = False 
    If Target.Address <> "$R$12" Then Exit Sub 
    If Target.Value = "YES" Then 
     Call LockRange(False) 
    Else 
     Call LockRange(True) 
    End If 

ExitSub: 
    Application.EnableEvents = True 
End Sub 

Private Function LockRange(bFlag As Boolean) As Boolean 
    On Error Resume Next 
    With ThisWorkbook.Sheets("SubSheet") 
     .Unprotect Password:="xyz" 
     .Range("E13:E14").Locked = bFlag 
     .Protect Password:="xyz" 
     'Debug.Print bFlag 
    End With 
    LockRange = True 
End Function 
+0

'随着ThisWorkbook.Sheets( “子片”) .Activate .Range( “E13”)选择 .Unprotect密码:= “XYZ” .Range( “E13:E14”)锁定=假 .PROTECT。密码:=“xyz” End With'会更好。 – Andy

+0

@Flephal。不幸的是,您提供的代码与我的代码完成相同的任务,该代码帮助我找到活动单元格。当我点击任何单元格时,我没有看到前面附加的截图的绿色边框。注意:我可以编辑单元格。 – sady

+0

@安迪问题仍然存在:( – sady

0

我想你必须键入:

.EnableSelection = xlNoRestrictions 

顺便说一句,你可能希望通过合并Disabler()Enabler()潜艇进入一个子缩短代码:

Public Sub DisableSubSheet(disable As Boolean) 
    With ThisWorkbook.Worksheets("SubSheet") 
     .Unprotect Password:="xyz" 
     .Range("E13:E14").Locked = disable 
     .Protect Password:="xyz" 
     .EnableSelection = xlNoRestrictions '<--| make it possible for user to select cells 
    End With 
End Sub 

因此,改变你的Worksheet_Change事件处理程序代码如下:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
    If Not Intersect(Target, Range("R12")) Is Nothing Then 
     If Target.Value = "YES" Then 
      DisableSubSheet False '<--| in place of previous 'Call Enabler' 
     Else 
      DisableSubSheet True '<--| in place of previous 'Call Disabler' 
     End If 
    End If 
    Application.EnableEvents = True 
End Sub 
相关问题