[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行・列の追加削除のみを禁止したい【VBA含む】』(カービー)
いつもお世話になっております。
標記の通りになりますが、
エクセル上で行・列の追加や削除のみを禁止するには、どのような方法がありますでしょうか?
何か良い提案、方法があればご教授願いたいです。
今までの流れとしては、
・シートの保護をかける
→データの保護によりフォームコントロールのボタンが起動できなくなる。
ボタンの内容は、
*シート内のデータを抽出する検索フォーム、
*オートフィルターをかけるボタン
*オートフィルターを解除するボタン
以上3つです。
・VBAで各モジュールの構文に解除と保護を入れる
Worksheets("sheet1").Protect Password:="1"
このような構文等を利用して、一時解除→保護を行いましたが、
一時解除時にデータをいじれるようになってしまうので、やめました。
◎表上の行列の追加・削除が出来ない状態で、
コントロールボタンでデータの検索やオートフィルターを使用できるように
したい、というのが最終的な終着点です・・・。
やはり、難しいものでしょうか?
ご意見、いただければと思います。
何卒 宜しくお願い致します。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
UserInterfaceOnly:=True にすれば保護かけたままで VBAから操作は可能だったと思います。 m(_ _)m (隠居じーさん) 2020/01/28(火) 17:25
>やはり、難しいものでしょうか?
ん〜。
方法はいくつかありますが、
VBAでエクセルを制御することになります。
それが、難しいと感じるか、思ったほどでもないと感じるかは、
千差万別かと。
(まっつわん) 2020/01/28(火) 17:29
案2)シートの保護をしてても、マクロでの操作は許可する
ファイルを開くたびに毎度、設定する必要がある(マクロ化可)。
安心感はあるけど、案1との差別化という点では大差ない?
案3)ユーザフォームを使う
ユーザーフォーム表示中はシートは見るだけにも出来る。
市販のソフトのような画面を作れる。作れるというか作らないといけないので、
画面設計から始めなければならない。凝ったものを作ると制御が大変。
デザインが2000年から変わらないので、古いイメージになるかも?
色んなことを自分で作るので、自由度は高いかも。
案4)データを置いておくシートと、見せるだけのシート
(ユーザーフォームの代わりにシートを使う)を用意して、
データを置いておくシートを非表示にする。
使い慣れたシートを使うので、画面設計は楽かも。
図形なども使ってデザイン可能、やりようによってはユーザーフォームより見映えはするかも?
高機能なスプレッドシートコントロール(=エクセルのシートそのもの)を使うので、
関数なども豊富である意味扱いやすいかも。
セルの編集中はマクロが起動しない。あるいはイベントの連鎖という点では、
制御が難しいかも。
個人的意見を書いてみました。
(まっつわん) 2020/01/28(火) 17:58
隠居じーさん 様
アドバイス頂き、ありがとうございます。
再度、オープン時にUserInterfaceOnly:=Trueの構文を入れてみました。
Option Explicit
Private Sub Workbook_Open()
' 一旦、シート保護を解除 ActiveSheet.Unprotect Password:="201947"
' シート保護を設定(UIのみ) ActiveSheet.Protect Password:="201947", UserInterfaceOnly:=True
ActiveWindow.ScrollRow = 1
End Sub
しかし、検索をかけるマクロの方で
保護されたシートに対して、このコマンドは使用できないと表示されます。
この部分です→ Set dRng = Range("B6").CurrentRegion
以上マクロが上手く起動しない状態になっております・・・。
原因はUserInterfaceOnlyの構文でしょうか?
(カービー) 2020/01/29(水) 10:33
まっつわん 様
上記、隠居じーさん様への返信同様になりますが、
まっつわん様の提案2を踏まえ、
UserInterfaceOnlyの構文をオープン時に設定しました。
シート全体に保護をかける→UserInterfaceOnlyの構文を実行
⇒マクロが作動しない。
⇒デバックは検索上のSet dRng = Range("B6").CurrentRegion、
保護されたシートに対して、このコマンドは使用できないと表示される
状態になっております。
再度、ご返信いただけますと幸いです><
(カービー) 2020/01/29(水) 10:40
シート上のイメージと
コード全文、
と自分がやりたいこと。
を提示してみては?
今のままでも回答が得られるかも知れないですけど、
動作確認するために、
同じ状況を再現し、原因を究明しようと思ってくれるように、
説明した方が回答が得られやすいと思いますよ。
(まっつわん) 2020/01/29(水) 10:54
こんにちは ^^ 既に適切なアドバイスがなされているようですが。。。 とりあえず、実験、代行。。。m(_ _)m Sub Test01() Dim dRng As Range With Worksheets("Sheet1") .Protect Password:=4350, UserInterfaceOnly:=True Set dRng = Range("B6").CurrentRegion dRng.Clear dRng.Resize(10, 10) = "A" .Unprotect Password:=4350 End With End Sub で問題なく動いております。複数シートが存在するのでしたら 、シート指定を明確に記述してみてはどうでしょうか。 (隠居じーさん) 2020/01/29(水) 11:42
追伸。。。パスワードがもろ見え。。。というのもなんですねぇ 一工夫された方が良いかもですね。 ← 【変数使用、中身は暗号化】 とか ^^; とて〜も手間ですね。 (隠居じーさん) 2020/01/29(水) 11:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.