- 締切済み
エクセルのマクロを有効にしないと表示しないようにする方法
エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか 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
- baliindo
- お礼率26% (4/15)
- その他(業務ソフトウェア)
- 回答数6
- ありがとう数7
- みんなの回答 (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枚のシートを非表示にすることは可能でしょうか、、また、シート名を変更してもできるのでしょうか? よろしくおねがいします
関連するQ&A
- コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい
コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい お世話になります。 上記の内容を実現したいのですが This Workbookには Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False Sheets("Sheet1").Select ActiveWorkbook.Protect Password:="123" ActiveWorkbook.Save End Sub ――――――――――――――――――――――――――――――――――――――― Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="123" Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet2").Select Sheets("Sheet3").Select Sheets("Sheet1").Visible = False End Sub が入っていますがどのようにすればいいのでしょうか? ご教示お願いします。 ちなみにexcel2003です。
- ベストアンサー
- その他MS Office製品
- マクロを有効にしないと表示されないようにする方法(続き)
エクセルのマクロを有効にしないと表示しないようにする方法(続き) Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim i As Integer For i = 1 To 5 Sheets(i).Visible = False Next ActiveWorkbook.Protect Password:="error" ActiveWorkbook.Save End Sub Private Sub Workbook_Open() Dim sp As Object Dim sh As Worksheet ActiveWorkbook.Unprotect Password:="error" For i = 1 To 5 Sheets(i).Visible = True Next If Date >= DateValue("2007/XX/XX") 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 をしようすると、シート名(Sheet1,Sheet2,,,)を変更すると、"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。解決策はありますでしょうか
- 締切済み
- Visual Basic
- 強制的にマクロを有効にするVBA
エクセル2010を使っている者です。 マクロの入ったファイルを開くときに、強制的にマクロを有効にするようなVBAは どのように組めば良いか、ご教授願います。 ネットで調べてみると、以下のものが見つかりました。 http://www.saka-en.com/office/vba-open-the-macro-enabled-forcibly/ 1 Option Explicit 2 3'** 4 ' ワークブックオープン 5'** 6 Private Sub Workbook_Open() 7 ThisWorkbook.Unprotect Password:="password" 8 On Error Resume Next 9 If ThisWorkbook.Sheets("編集用").Visible <> True Then ThisWorkbook.Sheets("編集用").Visible = True 10 If ThisWorkbook.Sheets("ダミー").Visible <> False Then ThisWorkbook.Sheets("ダミー").Visible = False 11 ThisWorkbook.Protect Password:="password" 12 'ThisWorkbook.RunAutoMacros Which:=xlAutoOpen 13 On Error GoTo 0 14 Exit Sub 15 End Sub 16 17 '** 18' ワークブックを閉じる前 19 '** 20 Private Sub Workbook_BeforeClose(Cancel As Boolean) 21 Dim Answer As Long 22' 保存されているかチェック 23 If ThisWorkbook.Saved = False Then 24 Answer = MsgBox("Do you want to save the changes to the '" & ThisWorkbook.Name & "' ?", vbExclamation + vbOKCancel, "Microsoft Excel") 25 Select Case Answer 26 Case vbCancel 27 Cancel = True 28 Exit Sub 29 End Select 30 End If 31 ThisWorkbook.Unprotect Password:="password" 32 On Error Resume Next 33 If ThisWorkbook.Sheets("ダミー").Visible <> True Then ThisWorkbook.Sheets("ダミー").Visible = True 34 If ThisWorkbook.Sheets("編集用").Visible <> False Then ThisWorkbook.Sheets("編集用").Visible = False 35 ThisWorkbook.Protect Password:="password" 36 ThisWorkbook.Save 37 End Sub しかし、このコードだと、編集するシートが1枚であれば良いのですが、何枚もある場合や、随時、シートを追加していくようなファイルの場合は修正が必要だと思います。 どのように修正すれば良いのでしょうか。 もしくは、例えば、マクロが有効になっていない場合は、ファイルは開けるものの、注意喚起のメッセージボックスを有効にするまで表示させるような設定にすることは可能でしょうか。 ご教授いただけると幸いです。 よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- 仕事で使用しています。教えてください。
仕事で使用しています。教えてください。 エクセルの表でマクロを使用しているのですが、入力後保存して再度開くと入力できなくなってしまいました。 マクロ勉強中で、コピペしようしている為、どこがダメなのかがわかりません。 お分かりになる方、教えていただけますか? 現在使用しているマクロは Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="8253" Sheets("日別管理").Visible = True Sheets("部門別").Visible = True Sheets("仕入原価").Visible = True Sheets("買掛").Visible = True Sheets("小口").Visible = True Sheets("一覧表").Visible = True Sheets("精算書").Visible = True Sheets("TOP").Visible = False Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect Password:="****", AllowFormattingColumns:=True, AllowFormattingRows:=True End With Next myWS End Sub Sub シートの保護() Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect Password:="****", AllowFormattingColumns:=True, AllowFormattingRows:=True End With Next myWS End Sub Sub シートの保護解除() Dim myWS As Worksheet Application.ScreenUpdating = False For Each myWS In Worksheets myWS.Unprotect Password:="****" Next myWS Application.ScreenUpdating = True MsgBox "シート保護解除しました。" End Sub 以上、3つです。 マクロを解除して使用してしまう方がいたので、マクロを使用してのみ使えるようにしたのですが…。 入力できなくなってしまいました
- 締切済み
- Visual Basic
- Excelのマクロで印刷制限と閲覧制限を掛ける
Excelのマクロで印刷制限と閲覧制限を掛ける エクセルで、1つのデータに5つのシートを作成し、うち4つのシートにデータ(携帯番号のリスト)が 入っています。 このデータに、閲覧制限と印刷制限を掛けようとし、インターネットで色々探し周り何とか形にはなりました。 「Alt+F11」で開くプロジェクトにはパスワードを掛け、通常見れない状態にし、 「VBAProject」の中の5つのシートにではなく「ThisWorkbook」に以下のマクロを 入れました。 ---制限1-------------------------------------------- Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim y, x, p Application.DisplayAlerts = False x = "password" ←←←これが印刷、プレビュー確認の為のパス y = InputBox("パスワードを入力してください", "印刷") If y <> x Then For p = 1 To Sheets.Count Sheets(p).PageSetup.PrintArea = "$IV$65536" Next p Else For p = 1 To Sheets.Count Sheets(p).PageSetup.PrintArea = "☆☆☆☆☆☆" Next p End If Application.DisplayAlerts = True End Sub --制限2--------------------------------------------- Private Sub Workbook_Open() Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet4").Visible = True Sheets("Sheet1").Select End Sub --制限3--------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Visible = False Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False Sheets("Sheet4").Visible = False End Sub --------------------------------------------------- 制限2で、開く時にマクロを有効にしなければ、Sheet1~4が表示されず、 無効にすれば何も入力されていないダミーのSheet5が表示されます。 制限3では、閉じる時にSheet1~4を隠し、ダミーのSheet5のみがある状態にして 閉じるマクロです。 質問したいのは制限1の印刷の制限の所なのです。 内容は、印刷or印刷プレビュー確認時にパスワードを求め、正しければ 正常に印刷orプレビューを見れますが、間違えれば何も入力されていない 【IV65536】のセルを印刷orプレビューで確認するという内容です。 そこでマクロ内の「☆」の部分に、印刷したいセル番地($A$1:$B$20など) を指定して入れると、パスワードが正しい場合、このセル番地内だけを印刷、 プレビュー確認が出来るのですが、問題はSheet1~4が全てそのセル番地で 印刷orプレビュー確認されてしまう事です。 当然Sheet1~4の印刷したい範囲は全てバラバラなので、どれかに合わせれば どれかが印刷されない部分があったり。。。 そこで、Sheet1~4全てに入力しセル番地を変えてみましたが、上手くいかずほとほと困っております。 全くのマクロの初心者と言っていい自分ですが、こんな自分でも分かるようなマクロで この問題を解決できないでしょうか?
- ベストアンサー
- Visual Basic
- 値の受け渡し
VBAで開くときにマクロを有効にしないとシートがみれないように 【はじめに】【松】【竹】【梅】の4つのシートがあるうち、 保存時に 【はじめに】=表示、 【松】【竹】【梅】=非表示 保存後に 【はじめに】=非表示、 【松】【竹】【梅】=表示 の処理にしましたが、 閉じるで保存ではなくctrl+Sで保存した場合、まだ処理中でも 【竹】【梅】シートで保存した場合【梅】シートが表示されてしまいます。 どのようにしたら使っていたシートに戻れるでしょうか? よろしくお願いします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("はじめに").Visible = True Sheets("はじめに").Select Sheets("松").Visible = False Sheets("竹").Visible = False Sheets("梅").Visible = False End Sub Private Sub Workbook_afterSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False ★保存をしたシートに戻りたい End Sub Private Sub Workbook_Open() Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False End Sub
- ベストアンサー
- その他MS Office製品
- マクロ実行時、非表示シートを表示させたくない
ファイル[testBOOK]の中に(sheet1)(sheet2)があり (sheet2)は非表示,ブック保護されています。 (sheet1)にあるマクロAAボタンで ・[図A]を非表示 ・[図B]を表示 ・マクロBBを実行 するようになっています。 --------------------------------------- Sub AA() '≪非表示≫ ActiveSheet.Shapes("図A").Visible = False '≪表示≫ ActiveSheet.Shapes("図B").Visible = True 'ブック保護解除 ActiveWorkbook.Unprotect 'マクロBB実行 Sheets("sheet2").Visible = True Sheets("sheet2").Select Application.Run "testBook.xlsm!BB" ActiveWindow.SelectedSheets.Visible = False 'ブック保護 ActiveWorkbook.Protect End Sub ---------------------------------------- マクロBBとは[sheet2]の中にある ・[図A]を非表示 ・[図B]を表示 です。 上記のマクロを実行させると(sheet2)が瞬間的に表示されてしまうのですが、 これを表示させないようにすることはできないでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルの使用期限の付け方
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
- ベストアンサー
- オフィス系ソフト
- ■助けてください。■エクセルのマクロで困っています。
エクセルで、シートを一つ削除するマクロを教えてください。 本当に困っています。 マクロをご存知の方、ずぶの素人の私にご教示何卒よろしくお願いします。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 現在、これを応用して、すべてのシートを 削除するのではなく、ひとつのシートだけ削除したいのです。 例えば「SheetA」、「SheetB」、「SheetC」、「有効期限切れ」という 4つのシートがあったとして、 指定した期日が来たら、「SheetC」だけを削除したいのです。 なお、エクセルファイルを開く際に、マクロを無効にされてしまうと 期日が来てもSheetCが削除されずに 残ってしまっては困るのです。 そこで、マクロを有効にしないと SheetCが現れないようにしたいのです。 (以下のマクロではそのようになっています) 一つだけシートを削除するマクロをやり方をご存知の方、マクロのご教示のほど 何卒よろしくお願い致します。 なお、小生、マクロはずぶの素人でして、 マクロの文面を頂いてコピー貼り付けするぐらいしか 能がありません。 つきましては、以下の文面を モディファイしてご教示頂けませんでしょうか。 よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) endsheetname = "有効期限切れ" If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Sheets("SheetA ").Visible Then Sheets("SheetC ").Visible = xlVeryHidden End Sub Private Sub Workbook_Open() endsheetname = "有効期限切れ" If Date >= "3008/09/29" Then Application.DisplayAlerts = False If Sheets.Count = 1 Then If Sheets(1).Name <> endsheetname Then Sheets.Add(After:=ActiveSheet).Name = endsheetname End If Else On Error Resume Next Sheets(endsheetname).Delete On Error GoTo 0 Sheets.Add(After:=ActiveSheet).Name = endsheetname End If sheetnumber = Sheets.Count For i = 1 To sheetnumber For j = 1 To 2 If Sheets.Count = 1 Then Exit For If Sheets(j).Name = " SheetC " Then If Not Sheets("SheetC ").Visible Then Sheets("SheetC ").Visible = True If Sheets(j).Name <> endsheetname Then Sheets(Sheets(j).Name).Delete: Exit For Next Next Range("b" & 3).Value = "ご利用ありがとうございました。" ActiveWorkbook.Save Application.DisplayAlerts = True End If If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Not Sheets(" SheetC ").Visible Then Sheets(" SheetC ").Visible = True End Sub
- 締切済み
- オフィス系ソフト
- エクセルで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
- ベストアンサー
- Excel(エクセル)
お礼
merlionXX さん ありがとうございました うまくいきました
補足
教えて頂いた式を使い、今度は、シートを12枚使用して、データを作ろうとしたのですが、マクロを有効にすると"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。度々すみませんが、ご教授お願い致します