2017-10-09 7 views
1

ユーザーがセルの値を変更できないようにスプレッドシートをロックしていますが、計算を行うためにVBAマクロを実行できます。私のコードは次のようになります:Excelシートを保護するが、テーブルの変更を許可する

Private Sub Workbook_Open() 
Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
ws.Protect "Password", UserInterfaceOnly:=True 
Next 
Other_function() 
End Sub 

これはセルを変更からユーザーを防止し、正常に動作しますが、この例でも作業できるように:しかし

Private Sub CommandButton1_Click() 
    Worksheets(1).Range("A20").Value = "AAA" 
End Sub 

、私はテーブルに行を追加しようとすると、私は1004エラーを取得する:

Dim ws As Worksheet 
Dim tbl As ListObject 
Set ws = Worksheets("SecondSheet") 
Set tbl = ws.ListObjects("TableName") 
Dim newrow As ListRow 
Set newrow = tbl.ListRows.Add 
With newrow 
    .Range(1) = onevalue 
    .Range(2) = twovalue 
    .Range(3) = threevalue 
    ... 
End With 

私は全部毎回の保護を解除せずに、この表に新しい行を配置する必要があり、そのExcelを伝えることができますどのように?

+0

最後のコードの前にws.Unprotect "Password"という行を追加してみましたか? –

+0

これはうまくいくが、何らかの理由でコードがクラッシュした場合、シートは保護されないままになる。私はそれを避けたかった。 – Variax

+0

@Variaxもしそれが助けられたら、私の答えを受け入れるのは親切だろう。ありがとうございました :) – Teasel

答えて

0

ワークシートを保護すると、テーブルへの行の追加または削除ができなくなります。シートの保護を解除する必要があります。

1

VBAのみを受け入れることはできません。操作を行い、後で再保護する前にシートの保護を解除する必要があります。

あなたがAllowInsertingColumnsまたはAllowDeletingColumnsで保護されたシートで列を追加/削除できるようにすることができますが、あなたがそうするならば、あなたは挿入または列を削除するスクリプトとユーザーを受け入れます。

Source for AllowInsertingColumns and AllowDeletingColumns

関連する問題