[[20200128164850]] 『行・列の追加削除のみを禁止したい【VBA含む】』(カービー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『行・列の追加削除のみを禁止したい【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


案1)今まで通り操作の度にシートの保護を解除、フィルターの操作後またシートの保護
特に支障はないはずだが、一瞬でも操作可能になるので、万が一が心配。

案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.