- 締切済み
エクセルのマクロを有効にしないと表示しないようにする方法
エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか 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
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
病で臥せっており、拝見するのが遅くなりました。 > 今度は、シートを12枚使用して、データを作ろうとしたのですが、マクロを有効にすると"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。 シートの構成と、あなたの書いたコードを提示してください。そして、そのコードのどの部分でエラーになりますか? (デバッグで反転していると思いますが)
- merlionXX
- ベストアンサー率48% (1930/4007)
> セルの中身は消去されるのですが、貼り付けたデータや罫線などは残ってしまいます。 貼り付けたデータや罫線ってなんですか? データや罫線は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
- merlionXX
- ベストアンサー率48% (1930/4007)
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
お礼
merlionXXさん おっしゃるとおりでした 上記の式を入れたらうまくいきました! 完璧です 何度もアドバイスいただき、ありがとうございました
補足
merlionXXさん 迷惑ついでにもう一つ質問なのですが、 セルの中身は消去されるのですが、貼り付けたデータや罫線などは残ってしまいます。これらも全て、消去することは可能でしょうか? 他力本願で申し訳ありませんが、ご教授おねがいします
- merlionXX
- ベストアンサー率48% (1930/4007)
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 ではいかがですか?
補足
merlionXXさん、早速のご変更ありがとうございます 上記の式を入れて、日付を変更してみたのですが、今度は、マクロを有効にせず、無効のままでも、すべてのシートが表示されてしまいます。やり方が間違っているのでしょうか? 何度もすみません、、、
- merlionXX
- ベストアンサー率48% (1930/4007)
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
補足
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)
マクロを有効にしないと全てのシートを表示しないようにはできません。 なぜならばエクセルですべてのシートを非表示に出来ないからです。 最低1シートは表示させておかなければなりません。 Sheets("Sheet2").Visible = False でエラーになったのなら、そのブックにはシートが2つしかなかったのではありませんか?
補足
merlionXXさんのおっしゃる通り、シートは2つです。 最低1シートは表示させておかなければいけないのですね、、 それであれば、まっさらなシートを5枚目につくり、4枚のシートを非表示にすることは可能でしょうか、、また、シート名を変更してもできるのでしょうか? よろしくおねがいします
お礼
merlionXX さん ありがとうございました うまくいきました
補足
教えて頂いた式を使い、今度は、シートを12枚使用して、データを作ろうとしたのですが、マクロを有効にすると"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。度々すみませんが、ご教授お願い致します