2016-10-05 15 views
0

ブック/ワークブックの両方のブックが保護されています。 ドロップダウンの値が「いいえ」のときに特定の範囲のセルをロック/無効にするコードがあります。ドロップダウンの値が「はい」のときにロックを解除/有効にします ドロップダウンの値と無効にするセルは別のシートに「メインシート」 「サブシート」保護されたセルをクリックすると、VBAがプロンプトを表示します

のセル範囲に

ドロップダウン私はまた、彼は、保護範囲とする場合値が「いいえ」に設定されているのをクリックすると、ユーザーにプロンプ​​トをスローする必要があります。

私はユーザーがクリックしたときにそのプロンプトを投げていないとして、間違ったつもりサブシート上のコード

Private Sub WorkBook_SheetChange(ByVal sh as Object, ByVal Target as Range) 
If Intersect (Target, sh.Range("$E$19:$I$3000")) Is Nothing Then Exit Sub 
MsgBox "Please select the appropriate dropdown on MAIN Sheet " & Target.Address 
With Application 
    .EnableEvents = False 
    .UnDo 
    .EnableEvents = True 
End With 
End Sub 

わからない、続いて「メインシート」

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim worksh As Integer 
Dim worksheetexists As Boolean 
Dim str1 As String 

If UCase$(Range("E30").Value) = "YES" Then 
       Sheets("SubSheet").Select 
       Sheets("SubSheet").Range("E20:I3019").Locked = False 
       Sheets("SubSheet").Range("E20:I3019").Activate 
      Else 
       Sheets("SubSheet").Range("E20:I3019").Locked = True 
End If 
End Sub 

に次のコードを使用してい

保護された細胞。

答えて

1

最初。 Sheets("SubSheet").Selectを削除する必要があります。コードを実行していてシートの中にいないと、エラーが発生する可能性があります。試してください:

with ThisWorkbook.Sheets("SubSheet") 
    If UCase$(Range("E30").Value) = "YES" Then 
    .Range("E20:I3019").Locked = False 
    .Range("E20:I3019").Activate 
    Else 
    .Range("E20:I3019").Locked = True 
    End If 
end with 

秒。目標範囲を返さない。私はあなたのPrivate Sub WorkBook_SheetChangeByVal Targetをパラメータとして待っていることを意味し、Private Sub Worksheet_Changeは任意の値を返します。これは、あなたが選択した範囲またはセルを返す関数でなければなりません。

EDIT:あなたは返信用

with ThisWorkbook.Sheets("SubSheet") 
    If UCase$(Range("E30").Value) = "YES" Then 
    .Range("E20:I3019").Locked = False 
    Else 
    .Range("E20:I3019").Locked = True 
    WorkBook_SheetChange Range("E20:I3019") 
    End If 
end with 

そして

Private Sub WorkBook_SheetChange(ByVal Target as Range) 
    If Intersect (Target, Range("$E$19:$I$3000")) Is Nothing Then Exit Sub 
    MsgBox "Please select the appropriate dropdown on MAIN Sheet " & Target.Address 
    With Application 
     .EnableEvents = False 
     .UnDo 
     .EnableEvents = True 
    End With 
End Sub 
+0

はあなたに感謝します。最初に "Activate"行の "RangeクラスのActivateメソッドが失敗しました"というエラーが表示されます。 2番目の関数で、私は間違っている場合私は私の関数をPrivate Sub Worksheet_Changes(ByVal sh As Object、ByVal Target As Range)に変更しましたが、それでも私には一般的なメッセージ "CellまたはChartを変更しようとしています... " – sady

+0

もしあなたが'選択 'を使わないなら、 '活性化'を削除してください。 – Ary

+0

ええ、私はActivateと最初の機能がうまく動作するとコメントしました。 – sady

関連する問題