Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
シート保護設定時 セルの編集について
投稿日時: 19/11/11 12:05:24
投稿者: 正彦

保護を設定したシートでの,入力済みの非保護セルの内容を修正しようと,そのセルを選択すると,入力された文字列が消去されてしまいます。
別ブックに同等の保護をかけた別ブックを用意し,入力済みセルを選択すると文字は消去されず,カーソルは文末に表示され,引き続き編集ができます。
このように,動作させる設定の仕方を,ご教示お願いいたします。
 
オートシェイプの挿入・編集 可
セルの書式変更可
保護されたセルの選択不可
 
で,以下vbにの記述しています。
 
 
 
Cells.Locked = True
Cells.FormulaHidden = True
解除するセル記述
 
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, AllowFormattingCells:=True, UserInterfaceOnly:=True, Password:=""
ActiveSheet.EnableSelection = xlUnlockedCells
ThisWorkbook.Protect Password:=Pass, Structure:=True, Windows:=False

回答
投稿日時: 19/11/11 18:57:54
投稿者: simple

回答ではないのですが、コメントがつかないようなので、
確認させてください。
 

引用:
保護を設定したシートでの,入力済みの非保護セルの内容を修正しようと,そのセルを選択すると,入力された文字列が消去されてしまいます。
別ブックに同等の保護をかけた別ブックを用意し,入力済みセルを選択すると文字は消去されず,カーソルは文末に表示され,引き続き編集ができます。
このように,動作させる設定の仕方を,ご教示お願いいたします。

このようにとは、後者のことですよね。
 
(1)
まず、提示されたコードで、実現できていないことは何ですか?
明確に書いて下さい。
(2)
省略された「解除するセル記述」とかもそうですが、
こうした、「想定と異なる動作になってしまう」というテーマの場合は、
省略せずに、Sub から End Subまで、変数宣言とかも含めたものを
一式提示したほうがよいと思います。
・省略した箇所に問題があったり、
・それ以外に追加されたところが悪さをしていたり、
ということがありえます。問題の解決が遅れるだけです。
 
なお、「非保護セル」ということはありません。ロックされているか、いないかです。

回答
投稿日時: 19/11/12 17:17:49
投稿者: simple

こちらを放置して、なぜ新しくスレッドを建てるのでしょうか。
まったく同じ話なんでしょう?
あちらは削除して、こちらに追加投稿してはどうですか?
その際、

引用:
(1)
まず、提示されたコードで、実現できていないことは何ですか?
明確に書いて下さい。
について、明示して下さい。

回答
投稿日時: 19/11/12 20:02:44
投稿者: simple

コードは提示されたものの、
・想定は、こうなるべきところ、
・実際はこうなってしまって、困っている
と言う説明が一切ないので、なんら質問になっていないと思われる。
単なるコードの発表会になっている。
これでは返答したくても返答のしようがない。とほほな状態である。

投稿日時: 19/11/13 09:05:40
投稿者: 正彦

simple さんの引用:
コードは提示されたものの、
・想定は、こうなるべきところ、
・実際はこうなってしまって、困っている
と言う説明が一切ないので、なんら質問になっていないと思われる。
単なるコードの発表会になっている。
これでは返答したくても返答のしようがない。とほほな状態である。

 
 
ご指摘ありがとうございました。
説明が不十分で申し訳ありません。
 
以下のように動作させたいと考えています。
@Lockを外したセルのみ選択でき,編集ができる。Lockされたセルは,選択できない。
A保護されたシートやLockされたセルは,VBAで操作できる。
Bオートシェイプの挿入・編集ができる。
このようにしたいのです。
 
結果は,
@Lock解除のセルは,想定通り解除できました。選択し入力もできるのですが,入力された文字列を編集しようとダブルクリックすると,入力済みの文字列が消えてしまい修正や追加ができず一からの入力になってしまいます。
 
 
A,Bは,想定通り動作しています。
 
 
「ActiveSheet.Protect DrawingObjects:=False, Contents:=True, AllowFormattingCells:=True, UserInterfaceOnly:=True, Password:="" 」や
「ActiveSheet.EnableSelection = xlUnlockedCells 」の設定に不備があるのかと思い引数を変えて試しましたが,思い通りの結果は得られませんでした。また,Userformを表示して操作できるようにしているのですが,このUserformが原因かと思い表示させないでセルの編集をした場合も,同様にセルの文字列は消えてしまいました。
 
しかし,別ファイルで保護をかけLockを解除したセルで試してみたところ,セルの選択,文字列の編集ともにできました。
 
よろしくお願いいたします。
 
 
 

回答
投稿日時: 19/11/13 11:25:20
投稿者: simple

オプションで、「セルを直接編集する」としておいた状態で、
下記を実行すると、
A1セルについて、ダブルクリックで、セル内容がクリアーされます。

Sub test1()
    Cells.Locked = True
    Cells.FormulaHidden = True
    Range("A1,B2").Locked = False
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, _
          AllowFormattingCells:=True, UserInterfaceOnly:=True, Password:="12345"
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

    Cells.FormulaHidden = True
が影響しているものと思います。
 
以下のようにすると、A1セル、B2セルともに問題なく編集できます。
Sub test2()
    Cells.Locked = True
    Cells.FormulaHidden = True
    Range("A1,B2").Locked = False
    Range("A1,B2").FormulaHidden = False '' ■この部分追加
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, _
          AllowFormattingCells:=True, UserInterfaceOnly:=True, Password:="12345"
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

.FormulaHidden = Trueとする理由が私には分かりませんが、
セルの直接編集と両立しないので、どちらかを優先させることになるでしょう。

回答
投稿日時: 19/11/13 19:58:38
投稿者: simple

.FormulaHidden = True
つまり「数式の非表示」は、
ロックして保護したい対象において、
数式を表示する必要がない、さらには積極的に開示したくない、
という場合に使うもの
でしょう。
 
ロックしていないセルに対して、数式非表示にする積極的理由は無いと思います。
というのは、
編集時にクリアーされるという仕様(でしょう)の意図は不明ですが、
もともと変更されることを前提とした非ロックセル(非保護セル)においては、
・数式ではなく数値等を入力することが多いこと
・数式を変更する場合にも、既存の数式が表示された方が都合はいいと考えられること
から、数式非表示にする理由は見あたりません
ロックをはずすなら、数式非表示もしないようにしておくのがよいのではないですか?

投稿日時: 19/11/14 10:53:32
投稿者: 正彦

ご回答ありがとうございました。
指摘していただいた Cells.FormulaHidden = True ですが,数式を隠さないでも支障がないものです。
Cells.FormulaHidden = falseとして試したところ,思っていた通りの動作になりました。
 
ありがとうございました。