2016-11-24 129 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 
相關問題