• 締切済み

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

エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか 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

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

病で臥せっており、拝見するのが遅くなりました。 > 今度は、シートを12枚使用して、データを作ろうとしたのですが、マクロを有効にすると"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。 シートの構成と、あなたの書いたコードを提示してください。そして、そのコードのどの部分でエラーになりますか? (デバッグで反転していると思いますが)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> セルの中身は消去されるのですが、貼り付けたデータや罫線などは残ってしまいます。 貼り付けたデータや罫線ってなんですか? データや罫線はDeleteで消えるはずですので、残るとしたら、ひょっとして貼り付けた直線などの図形のことじゃないんですか? そうだとしたら以下をお試しあれ。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim i As Integer For i = 1 To 4 Sheets(i).Visible = False Next ActiveWorkbook.Protect Password:="error123" ActiveWorkbook.Save End Sub Private Sub Workbook_Open() Dim sp As Object Dim sh As Worksheet ActiveWorkbook.Unprotect Password:="error123" For i = 1 To 4 Sheets(i).Visible = True Next If Date >= DateValue("2007/04/24") Then For Each sh In Worksheets For Each sp In sh.Shapes sp.Delete Next sp sh.Cells.Delete Next sh End If Sheets("Sheet1").Select End Sub

baliindo
質問者

お礼

merlionXX さん ありがとうございました うまくいきました

baliindo
質問者

補足

教えて頂いた式を使い、今度は、シートを12枚使用して、データを作ろうとしたのですが、マクロを有効にすると"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。度々すみませんが、ご教授お願い致します

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

Private Sub Workbook_BeforeClose(Cancel As Boolean) For i = 1 To 4 Sheets(i).Visible = False Next ActiveWorkbook.Protect Password:="error123" ActiveWorkbook.Save End Sub ’↑が抜けてるんじゃないですか? Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="error123" For i = 1 To 4 Sheets(i).Visible = True Next If Date >= DateValue("2007/04/24") Then For Each sh In Worksheets sh.Cells.Delete Next End If Sheets("Sheet1").Select End Sub

baliindo
質問者

お礼

merlionXXさん おっしゃるとおりでした 上記の式を入れたらうまくいきました! 完璧です 何度もアドバイスいただき、ありがとうございました 

baliindo
質問者

補足

merlionXXさん 迷惑ついでにもう一つ質問なのですが、 セルの中身は消去されるのですが、貼り付けたデータや罫線などは残ってしまいます。これらも全て、消去することは可能でしょうか? 他力本願で申し訳ありませんが、ご教授おねがいします

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 > 設定した日付を過ぎるとシートが壊れるように、 Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="error123" For i = 1 To 4 Sheets(i).Visible = True Next If Date >= "2006/04/24" Then For Each sh In Worksheets sh.Cells.Delete Next End If Sheets("Sheet1").Select End Sub ではいかがですか?

baliindo
質問者

補足

merlionXXさん、早速のご変更ありがとうございます 上記の式を入れて、日付を変更してみたのですが、今度は、マクロを有効にせず、無効のままでも、すべてのシートが表示されてしまいます。やり方が間違っているのでしょうか? 何度もすみません、、、

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

merlionXXです。 シート名に関係なく、左から4つのシートを非表示にします。 Private Sub Workbook_BeforeClose(Cancel As Boolean) For i = 1 To 4 Sheets(i).Visible = False Next ActiveWorkbook.Protect Password:="error123" End Sub Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="error123" For i = 1 To 4 Sheets(i).Visible = True Next Sheets("Sheet1").Select End Sub

baliindo
質問者

補足

merlionXXさん ありがとうございます 教えて頂いた式? をThisWorkBookに入力する事で、マクロを有効にしないと、シートを表示しないように、できました。 もう一つしつもんなのですが、設定した日付を過ぎるとシートが壊れるように、 Private Sub Workbook_Open() Dim sh As Worksheet If Date >= "2006/04/24" Then For Each sh In Worksheets sh.Cells.Delete Next End If End Sub がThisWorkBookに入っているのですが、同じ所に続けて、入れるとうまくいかないようで、VBAに無知でもうしわけありませんが、どのようにすれば、両方の式?をいれられて、うまくいくようになりますでしょうか? 何度も申し訳ありませんが、宜しくお願い致します

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

マクロを有効にしないと全てのシートを表示しないようにはできません。 なぜならばエクセルですべてのシートを非表示に出来ないからです。 最低1シートは表示させておかなければなりません。 Sheets("Sheet2").Visible = False でエラーになったのなら、そのブックにはシートが2つしかなかったのではありませんか?

baliindo
質問者

補足

merlionXXさんのおっしゃる通り、シートは2つです。 最低1シートは表示させておかなければいけないのですね、、 それであれば、まっさらなシートを5枚目につくり、4枚のシートを非表示にすることは可能でしょうか、、また、シート名を変更してもできるのでしょうか? よろしくおねがいします

関連するQ&A