エクセル2003のマクロについて教えて下さい。


ファイルを閉じるというマクロを作りたいです。
その時に、

1)シートの保護を設定 + 上書きしてもいいですか?はい、いいえ
 のコメントを表示したいのですが、
 どのようにすればよいのでしょうか?

2)マクロ → 編集が表示されないようにしたい。
 これをするとシート保護のパスワードが表示されてしまい、結局意味がないので。

Sub Auto_Close()
ActiveSheet.Protect Password:="1234", DrawingObjects:=True, _
contents:=True, UserInterfaceOnly:=True
ThisWorkbook.Close False
End Sub

はダメでした。
なにぶん、素人なので分かるように詳しく教えて下さい。
お願いします。

回答の条件
  • 1人1回まで
  • 登録:2009/05/16 17:24:14
  • 終了:2009/05/16 18:45:15

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/05/16 17:46:44

ポイント60pt

ThisWorkbook の下に、下記のコードでどうでしょうか。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("シートの保護+上書きをしてもいいですか", vbYesNo) = vbNo Then
        Cancel = True
        Exit Sub
    End If
    
    ActiveSheet.Protect Password:="1234", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
    ThisWorkbook.Save
    Cancel = False
End Sub

VB のコード自体の保護は、

ツール⇒VBAプロジェクトのProperty⇒「保護」タブ

でパスワードを設定すれば、コードを見れない状態にできます。

http://www.happy2-island.com/excelsmile/smile01/capter00600-01.s...

id:msvista

先頭の

 Sub Auto_Close()

 ThisWorkbook.Close False

は削除してください。

繰り返しですが、コードは標準モジュールやシートモジュールではなく、ThisWorkbook モジュールの下に置いてください。

とやったのですが、

マクロが使用できないか、無効になっています。と表示されます。

マクロのセキュリティも最低にしているのですが。。。

2009/05/16 18:37:23
  • id:Mook
    Sub Auto_Close

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    プロシージャの開始を表す記述です。

    つまり、msvista さんは
    プロシージャの中にプロシージャを書いているので、そのようになります。

    今回の回答は Auto_Close を使用しないものですから、
    VBE の 左側で、 ThisWorkbook をダブルクリックし、開いた右側のウィンドウに
    回答したコードだけをコピーしてみてください。

    どうしても Auto_Close を使用したい理由があるのでしたら、それをコメントいただけますか?
  • id:msvista
    コメントありがとうございます。

    ThisWorkbook の下にコードを入れたのですが
    うまく動かないです。
    画像を表示させ見ていただきたいので一旦、終了し
    再度質問改めます。
  • id:msvista
    キャンセルしましたが、解決できました。
    もし、マクロとして使いたい場合、

    図形にマクロを登録したい。
    マウスを移動し「×」を押さなくても良いようにしたいのです。

    どうすればよいでしょうか?
  • id:Mook
    質問した内容は、指定したマクロの中だけで実行したいのでしょうか。
    それとも、それを含めてファイルを閉じるときに実行したいのでしょうか。

    もし後者であるなら回答したコードはそのままにし、
    図形に登録したマクロの中で
    Private Sub CommandButton1_Click()
      ThisWorkbook.Close
      ThisWorkbook.Saved = True
    End Sub
    のようにすればよいです。

    Workbook_BeforeClose はファイルが閉じる前に実行されますので、マクロで
    ファイルを閉じる場合も、閉じる前にこれが実行されます。
  • id:msvista
    >指定したマクロの中だけで実行したいのでしょうか

    そうです。
    例えば マクロ3 にコードを記述します。
    次に 図形にて(例えば矢印の図形や丸の図形) を選択し右クリック。
    マクロの登録 → マクロ3 を選択。

    そうしてマクロ3が登録された図形をシートの好みの箇所に配置し、
    それをクリックすると、シートを保護した状態のまま、

    「上書きしてもいいですか?はい。いいえ」

    のコメントが表示され

    「はい」をクリックすると上書き保存。
    「いいえ」をクリックすると上書き保存されずにファイルが閉じられる。

    次にファイルを開くとシートの保護はされたままの状態で
    作業が開始できる。

    ということをやりたいのです。
  • id:Mook
    であれば、通常通りファイルを閉じる際には保護されずに閉じることになりますが、

    Sub CloseFile()
      If MsgBox("シートの保護+上書きをしてもいいですか", vbYesNo) = vbYes Then
        ActiveSheet.Protect Password:="1234", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True
        ThisWorkbook.Save
      Else
        ThisWorkbook.Saved = True
      End If
      ThisWorkbook.Close
    End Sub
    を標準モジュールに置き、マクロの登録で CloseFile を選択すればよいでしょう。
  • id:msvista
    ありがとうございました。
    バッチリです!
  • id:Mook
    オプションを気にしていませんでしたのでいまさらですが、
       UserInterfaceOnly:=True
    はファイルを一度閉じると無効になりますので、ファイルを開いた際に再設定する必要があります。

    http://officetanaka.net/excel/vba/sheet/sheet07.htm
    の一番最後をご参照ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません