• ベストアンサー

特定のシートの削除を禁止したい(ブックの保護でなく)

Excelについて教えて頂きたいことがあります。 シート名でマクロを組んでいるので、誤ってシートを消されてしまうとエラーになってしまいます。 但し、外部データ取り込む為に、一時的にシートを挿入し、既存のシートにデータを転記し終わったら挿入したシートを削除するという機能が必要であるため、ブックの保護が出来ません。 ブックの保護をして、上記部データ取り込みのマクロを実行したらやはりエラーになってしまいました。 ブックの保護ではなく、特定のシートのみ削除を禁止する方法をご存知の方がいらっしゃれば教えて頂けませんか? または、上記外部データ取り込み用のシートのみ挿入、削除を認めるという方法でも結構です。 “外部データ取り込み用のシートの挿入→削除”操作以外は、既存のシート構成を保護したいのですが、どうすれ良いか分からず困っています。 ご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

>ブックの保護をして、上記部データ取り込みのマクロを実行したらやはりエラーになってしまいました。 ブックの保護を解除しなければ当然そうなりますよね。 で、以下のようにすれば? Sub test() 'ブックの保護解除   ActiveWorkbook.Unprotect password:="1234"     テンポラリーシートの追加     データインポート     テンポラリーシートを使っての処理     テンポラリーシートの削除 'ブックの保護   ActiveWorkbook.Protect password:="1234", Structure:=True, Windows:=False End Sub でどうでしょうか? 勘違いでしたらご容赦願います。    

cororon3
質問者

お礼

お礼が遅くなく申し訳ありません。 なるほど、ブックの保護解除とブックの保護の中に一連の操作を挟めが良いわけですよね。 確かにこの方法により、やっと思い通りのものが完成しました。 但し、よくよく自分の作ったマクロを眺めて見ると、マクロの記録に近いものがあり、まだまだという感じです。 でも、ボタンを押して今まで多大な時間を要していた操作が一瞬にして展開するのを見ると気持ちの良いものですね。 もっと勉強したいと思います。 本当にどうもありがとうございました。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。クラスモジュールで実現する方も書いてみました。 VBE画面で標準モジュールとクラスモジュールを挿入し、まずクラスモジュール(Class1:名前変更不可)に以下を貼り付けます。次にSub myCbar_click()に削除してはいけないシート名を書き換えます(サンプルの"Sheet1,Sheet2,Sheet3"の部分) Public WithEvents myCbar As Office.CommandBarButton Public Property Set opt(setOpt As CommandBarButton)  Set myCbar = setOpt End Property Public Property Get opt() As CommandBarButton End Property Private Sub myCbar_click(ByVal Ctrl As Office.CommandBarButton, canceldefault As Boolean) Dim ShName() As String Dim idx As Integer  ShName = Split("Sheet1,Sheet2,Sheet3", ",") '削除不可のシート名を記入する  For idx = 0 To UBound(ShName)   If ActiveSheet.Name = ShName(idx) Then    MsgBox "このシートは削除できません"    canceldefault = True     Exit For   End If  Next idx End Sub 次に標準モジュールには以下のVBAを貼り付けます。 Dim myCbarCls As New Class1 Sub InitializeCbarEvents() Set myCbarCls.myCbar = Application.CommandBars("Ply").Controls("削除(&D)") End Sub シート画面に戻りInitializeCbarEvents()を1回実行し、Sheet1、Sheet2、SHeet3のいずれかを「シート名右クリック」→「削除」しようとすると、エラーメッセージが表示されて削除できなくなります。 InitializeCbarEventsは Workbook_OpenからCallしておけば、ブックを開くたびに実行されますので、手動で実行する必要がなくなります。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

姑息的ですが「シート名タブ右クリック→削除」を選択できなくするのは以下の文で可能です。この操作は禁止しておいて、外部取り込みシートの削除はマクロで行ってはいかがでしょうか。(マクロでなら削除できます)  Application.CommandBars("Ply").Controls(3).Enabled = False ただしWorkbooks_BeforeClose()で .Enabled = True に戻す必要があります。 本格的に対応するならクラスモジュールが必要になると思います。

関連するQ&A

  • 【VBA】特定シート 名前編集・削除を禁止したい

    いつも大変お世話になっております。 Excel2003を使用しております。 今回VBAでやりたいことは、 特定シートの名前編集・削除を禁止したいのです。 シート名 「データ」 シート名 「一覧」 この二つを名前編集・削除禁止にしたいと思っております。 保護する方法も考えたのですが、 現在様々なプログラムでシートを利用しており、 保護をかけると色んなフォーム上で保護解除をしないといけません。 データの参照・編集が出来ないと困るのです。 保護をかける 以外で何か、方法はありますでしょうか? 以上、 回答よろしくお願い致します。

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。

  • ExcelでVBAにおけるシートの保護に関して・・・

    ユーザーフォームで入力した値がシートのセルに入力 されるというものを作っています。 そこで、シートの列挿入及び列削除を禁止しておきたい のですが、そのままシートを保護してしまうとユーザー フォームが開かなくなるので、VBAにてユーザーフォーム が開く前に保護を解除し、閉じるときに再び保護をかける ようにしました。 ただ、この方法だと、シート保護の項目全て(初期設定) に対して保護されてしまうため、例えば行挿入や行削除、 あるいはオートフィルタや並べ替えといったことまでが 出来なくなってしまいます。(手動で保護を解除すれば できるのですが、一々解除しなければならないのは面倒 なので何とか避けたいのです。) 禁止したいのは、列削除及び列挿入のみなのですが、 他によい方法はないでしょうか。

  • Excel シートの保護 VBA

    「データ」、「A」という名称の2つのシートを ブック起動時にパスワードつきで保護したいと考えています。 また、マクロ(VBAのフォーム?)のみで更新できるようにしたいとも考えています。 Dim sheet1 As Worksheet Set sheet1 = Worksheets("データ") sheet1.Protect Password:="pass", _ AllowFormattingCells:=True 上記のやり方があると見たので、 ThisWorkBookに貼り付けて保存し、再起動してみたのですが 普通に、「データ」のシートに書き込めてしまいます。 何もエラーも出ないため、どう考えればよいのかも分かりません。 回答よろしくお願い致します。

  • 不特定のシートをマクロで削除を

    いつもお世話になります WINDOWS7 EXCELL2010 です。 シート「記入」にデーターを入力してそのデーターをいくつかの振分のシートに転記しています。 条件 削除したい 1 0000    の4桁のシート名のいずれかのシートを削除   ※例えば 11月4日のシート名は 1104 の4桁になります。         1月1日は 0101 となります。        今月で言えば 1101 ~ 1130 の30枚のシートがあります。 削除しない 1 文字名   のシートは削除しない 2 1 ~ 12 のシートは削除しない 上記の削除したいの方法は私なりの考えで2通り考えました。 他にいい方法があればおすすめ願えればありがたいです。 その1~ 00 の4桁のシート名が削除の対象ですので、 例えば今月で言いますと ~1031(10月31日分) 先月までのシートをマクロで削除する方法 その2~      添付図のようにB列に○のあるシートのみをマクロにて削除する方法 抽出するマクロは下記です。 Sub アクティブセルからシート名一覧を作成する() Dim sh As Object Dim row_num As Long Dim col_num As Long If MsgBox("アクティブセルから下にシート名一覧を作成してもいいですか?", vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub row_num = ActiveCell.Row col_num = ActiveCell.Column For Each sh In ActiveWorkbook.Sheets Cells(row_num, col_num).Value = sh.Name row_num = row_num + 1 Next sh End Sub 小生の考えの その1~ その2~ または他の方法でいいアイディアがありましたら御指導いただけませんでしょうか。 宜しくお願いします。

  • VBAでシート挿入を禁止したい。

    エクセル2007で、ファイルを閉じるとその状態が全部保存されるように下記VBAを使ったファイルを作りました。 Private Sub Workbook_BeforeClose(Cancel As Boolean)  ThisWorkbook.Save End Sub ファイルのシート数は全部で6枚です。ファイルを開くとsheet5だけが表示します。マクロを有効にするとそのシートを非表示にしてsheet1からsheet4が表示するようにしてあります。 リボンは非表示にして操作できないようにしてあります。この状態でもファイルを開いている間に誰かがシート挿入タブ等でシートを挿入して閉じてしまうとその分も保存されてしまい、シートがどんどん増えてしまいます。ブックの保護をするとシート表示切り替えがうまくいかないみたいです。シート挿入タブを非表示にする方法はありますか。なければVBAでシート挿入禁止はどのように書くのでしょうか。

  • VBAでのブック・シートの保護・解除について

    エクセル2010のVBAでのブック、シートの保護&解除の方法について教えて頂きたく、 質問させて頂きます。 消されては困るシートや数式がある関係で、ブックオープン時にVBAでブックとシートにそれぞれパスワードをかけて保護しています。 VBAではシートの削除、作成、コピーなどを行っているため、VBA実行時のみ、保護を解除させるようにしたいと思います。 ただ、対象のシート自体にも入力したい項目があるため、その箇所については保護を解除しておく必要があります。 そして、VBA実行後、再度、その箇所以外にパスワードで保護をかけ直します。 イメージとしては下記のような流れになります。 対象ブック:ブックA 対象シート:シート1 パスワード:1234(それぞれ) 常時保護を解除しておきたいセル:range("A6:H106") 1.(オープン時には、)ブック保護&特定のセル以外のシート保護 2.VBA実行時には全ての保護解除 3.VBA終了時に、1の状態に戻る どうぞよろしくお願い致します。

  • ブック間のシート移動

    EXCEL VBA初心者です。 ブックAのシートAをブックBのシートの一番左側に移動させようと思います。 以下を実行するとエラーが出ますがなぜでしょうか? エラーの原因と対策方法を教えて下さい。 Sub シート移動() Worksheets("シートA").Move _ Before:=Workbooks("ブックB.xls").Sheets(1) End Sub ブックAはブック名が毎回変わります。 ブックAはメール添付を開いたブックです。 ブックAはシートがシートAしかありません。 シートAは名前が変わりません。 マクロコードはブックBあるいは個人用マクロブックに置きます。 よろしくお願いします。

  • エクセルのシートの保護、ブックの保護について

    エクセルのシートの保護、ブックの保護について いつもお世話になっております。 他のエクセルファイルとリンクしているエクセルのファイルを開いたときに、リンクの更新が表示されます。 ファイルを開いたときにリンクの更新がされないようにしたいのですが、シートの保護、ブックの保護でリンクが更新されないようにはできないでしょうか? それとも、リンクそのものを解除するしか方法がないのでしょうか…。

  • シートの削除や移動が出来なくなってしまいました。

    いつもお世話になっております。  最近ここでマクロを色々教わって試行錯誤しているうちに、テスト用に作ったシートの削除もシートの移動もできなくなってしまいました。 少し前にブックの保護をかけたのでそれだと思い、確認しましたがブックもシートも保護されていませんでした。 ちなみにシートのタブを右クリックすると、「コードの表示」と「シートの保護」と「全てのシートを選択」の3つのメニューしかアクティブになっていません。 他のエクセルファイルは大丈夫なのですが。

専門家に質問してみよう