スライサーとグラフが含まれている Excel ファイルを共有したいと思います。ユーザーがスライサーを使用してフィルター処理を行い、グラフを選択してコピーできるようにしたいのですが、シートを保護してグラフとスライサーの編集を防止したいのです。私が
知る限り、オプションはグラフとスライサーをロックすることであり、その場合、シートが保護されているときはグラフとスライサーは編集できませんが、スライサーはフリーズされ、グラフはコピーできません (PrintScreen はオプションではありません)。または、それらをロック解除することであり、その場合、それらは使用可能になりますが、編集可能になります。
これを回避する方法はありますか?
答え1
2 つのオプションがあります。1 つは、VBA 対応のワークシートを選択し、VBA を使用して独自のロジックを追加する方法ですが、シートが VBA 対応であること、xlsm
およびエンド ユーザーがワークブックでマクロを有効にしている必要があります。ただし、この方法により、許可されたユーザーの操作を最適に制御できます。2 つ目の方法は、xlsx
VBA を使用しない方法ですが、スライサーの削除やグラフの名前の変更など、ユーザーに対する一部の操作を拒否することはできません。
1) できるここで推奨されているように:
Private Sub Chart1_Click()
ActiveSheet.ChartObjects(1).CopyPicture
MsgBox ("Chart copied to clipboard. You can now paste this into another application.")
End Sub
つまり、ワークブックをマクロを含む xlsm ワークブックに変換する必要があります。次に、グラフのクリック時にクリップボード アクションを処理するマクロを追加します。
2) より良い方法は、保護されたワークシートでチャート要素をロック解除したままにして、マクロでプロパティを変更する:
Sub macro()
ActiveChart.ProtectData = True
ActiveChart.ProtectFormatting = True
ActiveChart.ProtectSelection = False
End Sub
またはシート上のすべてのグラフの場合:
For Each i In ActiveSheet.ChartObjects
i.Chart.ProtectSelection = False
i.Chart.ProtectData = True
i.Chart.ProtectFormatting = True
Next i
この方法では、ワークブックを作成するときにマクロを使用しますが、ワークブック自体には VBA は含まれません。
グラフ用に別のシートを作成すると、パスワードで個別に保護できます。
Sub macro()
Dim newChart As Chart
Range("C9:C11").Select
Set newChart = ActiveChart
With newChart
.Protect Password:="pwd", DrawingObjects:=True, Contents:=True
.ProtectData = True
.ProtectFormatting = True
.ProtectSelection = False
.ChartObjects(1).Chart.ProtectSelection = False
'setting other properties
End With
End Sub
スライサーについては、ロックを解除したままにして、ワークシートをロックするときに「ピボットテーブル レポートを使用する」をオンにする必要があります。
答え2
編集とは、グラフ自体の基礎となるデータまたはスタイルのみを意味しますか?
データのみをロックしたい場合は、保護されたシートにデータを置き(ピボットの使用、選択、並べ替えなども許可できます)、グラフを別のシートに置くことができます。
ここクリックするとグラフをコピーするマクロを使用することが提案されています。これは、グラフを含むシートも保護されている場合に使用できます。
答え3
読み取り専用モードを有効にしてみてください。これは Excel の機能 (保護されたビューとは別) だと思いますが、間違っているかもしれません。