• 締切済み

unprotectが有効になりません

VBAでどうしてもわからない点があるので教えていただけませんか。unprotectが有効にならないんです。 以下のコードでAファイルのマクロXXXを実行しても Bファイルのsheet2は保護解除されません。 悩んでます、よろしくお願いします。 EXCEL2000,2003ともにだめでした。 Aファイル  Private Sub XXX(**) { Bファイル.Save } Bファイル  Private Sub Workbook_BeforeSave(***) { sheet2.unprotect  }

みんなの回答

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

コードの書き方が少し変だが、 趣旨はわかる。 unprotectが有効になりません。そういうことになっています。 その他、実行できないメニューコマンドは沢山あります。 select,activate,deleteなど。 そうなんだから仕方がない。 特に BeforeSave イベントのメニュー コマンドは、実行中からブロックされます。↓ beforesaveの前に処理するか、手動にするか。 http://support.microsoft.com/kb/898511/ja

masa_ki
質問者

お礼

ありがとうございました。助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル ブック(マクロを含む)を保存してとじると、また開きます。

    ブックに保護をかけた状態で保存してあります。 共有状態にあり、マクロを有効にしてもらいたいので、 (1)開くときに保護解除 (2)保存のときに、保護をかけて保存後、(まだ閉じるとは限らないので)保護解除 ということをやろうとし、以下のように書きました。 エクセルごとではなく、このファイルのみ終了しようとすると、 開いた後と上書保存後に保護を解除する為、 ファイルを終了する時には必ず「変更を保存しますか?」と訊かれ、 その時に「はい」を選択すると、一度はそのファイルが終了するのですが、 すぐに マクロを含むファイルを開くときに出るメッセージ「セキュリティ警告マクロ マクロ有効 マクロ無効 詳細」が出て、また開こうとします。 保存「いいえ」を選択すると、普通に終了します。 エクセルごとを終了すれば保存「はい」にしても、普通に終了します。 このファイルのみ終了する時、保存の確認で、「はい」を選び、普通に終了するには、何を直したらよいでしょうか? その前に、根本的に間違ってたりしますでしょうか・・・。 よろしくお願いします。 ThisWorkbookに、 Private Sub Workbook_Open() ActiveSheet.Unprotect Password:="(パスワード)" End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ActiveSheet.Protect Password:="(パスワード)" Application.OnTime Now, "保護解除" End Sub 標準モジュールに、 Sub 保護解除() ActiveSheet.Unprotect Password:="(パスワード)" End Sub

  • VBAでのマクロの削除方法について教えてください。

    ACCESS2000のVBAから、excelのThisWorkbookに書かれたVBAマクロ「Sub Workbook_BeforeSave」を削除したいのですが、うまくいきません。どなたか方法を教えてください。よろしくお願いいたします。

  • 一括保護のマクロにパスワードをかける方法

    エクセル作った表、20シートを一括保護・解除をマクロを使い(どなたかの回答をコピーして)作成しました。保護・解除はできたのですが、このマクロにパスワードをかけ、保護の解除が他の人に出来ないようにしたいのですが、どのようにすれば良いのでしょうか? つかったマクロは・・・ 『保護』 Sub シートの保護() 'Dim~として変数を宣言する Dim myWS As Worksheet 'myWSを「ワークシート」として宣言 'ブック中のシート全部を1枚ずつ以下の作業を繰り返す For Each myWS In Worksheets With myWS 'myWSで .EnableSelection = xlUnlockedCells 'ロックしていないセルを選択出来るように .Protect '保護する End With 'With myWSに対する締め Next myWS 'Forに対応するもの End Sub 『解除』 Sub シートの保護解除() Dim myWS As Worksheet Application.ScreenUpdating = False For Each myWS In Worksheets myWS.Unprotect Next myWS Application.ScreenUpdating = True MsgBox "シート保護解除しました。" End Sub 『Workbook』 Private Sub Workbook_Open() Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect End With Next myWS End Sub この3つです。VBA初心者で、わかりにくい説明ですが、よろしくお願いいたします。

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

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

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • エクセルで2つのマクロを結合したい

    毎度お世話名なっております。 以前ここで教えてもらった保存時に全シートの入力済みセルに自動で保護がかかる<マクロ1>を教えてえもらって非常に多くのBookに採用しているのですが、今回同じBookの「計算表」シートの特定のいくつかのセルだけ保護がかからないようにしたく試行錯誤で2つのマクロをつなげてみたのですが情けないことに期待通りに動かず。 単に最初のマクロのEnd Subを削除しただけではうまくいかず。 どなたかHELPお願い致します。 <マクロ1> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Const MyPassword = "" 'パスワード(省略可) Dim sh As Worksheet On Error Resume Next For Each sh In Worksheets sh.Unprotect Password:=MyPassword With sh.Cells '全セルのロックを外す .Locked = False '定数が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeConstants).Locked = True '数式が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeFormulas).Locked = True End With sh.Protect DrawingObjects:=True, Contents:=True, _ Scenarios:=True, Password:=MyPassword Next On Error GoTo 0 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 保護解除() <マクロ2> ' 保護解除 Macro '' Sheets("計算表").Select Range("C6:D6").Select ActiveSheet.Unprotect End Sub

  • エクセルのマクロを有効にしないと表示しないようにする方法

    エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets(\"Sheet1\").Visible = False Sheets(\"Sheet2\").Visible = False ActiveWorkbook.Protect Password:=\"error123\" End Sub Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:=\"error123\" Sheets(\"Sheet1\").Visible = True Sheets(\"Sheet2\").Visible = True Sheets(\"Sheet1\").Select End Sub

  • Private Sub Workbook_BeforeSaveについて

    エクセル2000です。 腑に落ちない現象が起きているので質問させてください。 Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.TextBoxes("テキスト").Visible = True Sheet1.Buttons("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書いてみました。 手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。 ところが、標準モジュールに書いた以下のコード、 Sub 保存() ActiveWorkbook.Save End Sub を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。 試行錯誤の結果、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.Shapes("テキスト").Visible = True Sheet1.Shapes("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。 どうしてでしょうか?

  • エクセルの使用期限の付け方

    No.361737を参照して、 エクセルに使用期限をつけようとしたのですが、 日付の反応がうまく作動しません。 下記のVBAのまま使用すると どのような日付でもロックがかかり メッセージボックスが表示され Nowのあとの【<】を【>】にすると どのような日付でもロックが解除されてしまいます。 このような場合、どこかを修正すればうまく作動するようになるでしょうか? よろしくお願いします。 下記のVBAはNo.361737よりの抜粋です。 Private Sub Workbook_Open() If Now < "02/09/19" Then 'ここで期限を決める  ActiveWorkbook.Unprotect "AAA" 'ブック保護解除   Sheets("Sheet1").Visible = True   Sheets("Sheet1").Activate   Sheets("Sheet2").Visible = False  Else'----期限後ならばメッセージを表示   MsgBox "期限切れ"  End If ActiveWorkbook.Protect "AAA" End Sub

  • エクセルVBA 保護シート&フィルタ実行 全シート

    VBA超初心者です。 たくさんのシートのあるエクセルで、 シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。 (現在エクセル2000を使用してます) ネットで調べてVBAを設定してみました。 しかし下記のようにするとコンパイルエラーになってしまうのですが、 正しい方法を教えていただけると助かります。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub Private Sub Workbook_Open()   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.filter"   End With   With Worksheets.Select     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True   End With End Sub Private Sub filter()   On Error Resume Next   Selection.AutoFilter End Sub

専門家に質問してみよう