2016-04-16 37 views
0

ブックのセルを編集しないようにしました。私はこのコードを書いた短いVBAコードを以下のように改善するにはどうすればよいですか?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Application.EnableEvents = False 
    Application.Undo 
    Application.EnableEvents = True 
End Sub 

しかし、いくつかのテストの後、私は例外をキャッチしました。私がセルを切り取り、別のセルにペーストすると、許可されます。このような他の例外があるかどうかはわかりません。私の質問は、私はどのように編集されている細胞を保護するのですか?その間にコピーすることができますか?

+1

シートが保護されている場合(変更したくないセルも)、Ctrl + X(または変更されるその他すべて)にエラーが表示されますセルの値)....だからあなたは使いますか? –

+0

私はExcel 2013を使用しています。私のコードは、セルの内容を変更することから私を保護できますが、カットして別の場所に貼り付けることはできません。あなたのソリューションは、どのようにすべてのシートを保護するのですか? @DirkReichel – Nicholas

+0

はい、Excelの組み込みの保護シートを使用する場合、正常に動作します。これは、シートが1枚ずつ、レビュー>保護シートに移動する必要があるようです。しかし、一度にすべてのシートを適用する解決策がない限り、私は短いVBAコードを好むでしょう。しかし、私の現在のコードにはいくつかの問題があります。 – Nicholas

答えて

1

シートを保護することなく、私は考えることができる唯一のソリューションです:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    If Application.CutCopyMode = 2 Then Application.CutCopyMode = 0 
End Sub 

は、自己説明である必要があります。)

などすべてのシートrunn:

Sub protectAllSheets() 
    Dim x As Variant 
    For Each x In ThisWorkbook.Sheets 
    x.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    Next 
End Sub 
2

使用インクルードをインターフェースのみのオプションでは、シートをロックすることができますが、ユーザーインタラクションの場合のみです。

Private Sub Workbook_Open() 
    For Each ws In ThisWorkbook.Sheets 
     ws.Protect UserInterfaceOnly:=True 
    Next 
End Sub 
+0

ユーザーのやりとりについて少し説明してください。それには何が含まれ、何が含まれないのですか? – Nicholas

+0

セルがロックされている場合は、内容を変更することはできませんが、[Worksheet.Protect](https://msdn.microsoft.com/en-us/library/office/ff840611.aspx)** ** **マクロは依然としてそれを変更することができます。そして、私が知る限りでは、マクロは、何の制限もなく保護されていないような動作をします。 –

+0

マクロは 'Worksheet.Protect'が' UserInterfaceOnly'引数でtrueに設定されている場合にのみ変更できます。ユーザーインタラクションとは、ユーザーがキーボードやマウスで変更できるものです。何か変更されたかどうか、または実行中のコードによってアプリケーションが認識しています。それが手紙なら、それはその変更を許すでしょう。 –

関連する問題