ユーザーがセルの値を変更できないようにスプレッドシートをロックしていますが、計算を行うために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を伝えることができますどのように?
最後のコードの前にws.Unprotect "Password"という行を追加してみましたか? –
これはうまくいくが、何らかの理由でコードがクラッシュした場合、シートは保護されないままになる。私はそれを避けたかった。 – Variax
@Variaxもしそれが助けられたら、私の答えを受け入れるのは親切だろう。ありがとうございました :) – Teasel