Excelのマクロで印刷制限と閲覧制限を掛ける方法

このQ&Aのポイント
  • Excelのマクロを使用して、特定のデータに対して印刷制限と閲覧制限をかける方法を紹介します。
  • マクロを利用して、データが入力された特定のシートに対して印刷制限と閲覧制限を設定することができます。
  • 印刷や閲覧を試みる際にはパスワードの入力が必要であり、正しいパスワードを入力することで印刷や閲覧が許可されます。
回答を見る
  • ベストアンサー

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全てに入力しセル番地を変えてみましたが、上手くいかずほとほと困っております。 全くのマクロの初心者と言っていい自分ですが、こんな自分でも分かるようなマクロで この問題を解決できないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>問題はSheet1~4が全てそのセル番地で印刷orプレビュー確認されてしまう事です。 当然Sheet1~4の印刷したい範囲は全てバラバラなので、どれかに合わせればどれかが印刷されない部分があったり。。。 そのようなプログラムになっているので当然のことです。 プログラムで印刷範囲を指定しなければ、シートに設定した印刷範囲に従って印刷されます。 >こんな自分でも分かるようなマクロでこの問題を解決できないでしょうか? ブックに制限を加えるマクロは、努力した割には思ったような動作をしない場合が多いです。 初心者であればなおさら無意味な事を行って多くの時間を費やしていることでしょう。 基本的には、エクセルの機能や関数をしっかりと覚えた上でマクロを使用した方が効率的なプログラムを組めるでしょう。

thiruna
質問者

お礼

マクロを記憶させて、それをなんとか使ったり、コピベ程度では無理そうですね。。。 助言ありがとうございます。

関連するQ&A

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

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

  • 値の受け渡し

    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

  • コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい

    コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい お世話になります。 上記の内容を実現したいのですが 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です。

  • ■助けてください。■エクセルのマクロで困っています。

    エクセルで、シートを一つ削除するマクロを教えてください。 本当に困っています。 マクロをご存知の方、ずぶの素人の私にご教示何卒よろしくお願いします。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 現在、これを応用して、すべてのシートを 削除するのではなく、ひとつのシートだけ削除したいのです。 例えば「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

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセル マクロ 印刷指定

    マクロが解りません。色々調べてマクロの記録を使って、下記のマクロを作りました。 1枚目の印刷を2枚目、3枚目印刷として書き足してみました。 しかしエラーが出て2番目のシートからの印刷ができません。 Sub 連絡票印刷() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+p ' Sheets("連絡票").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("連絡票").Range("p1").Value, To:=Sheets("連絡票").Range("q1").Value, Collate:=True, IgnorePrintAreas:=False Sheets("予定表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("予定表").Range("y1").Value, To:=Sheets("予定表").Range("z2").Value, Collate:=True, IgnorePrintAreas:=False Sheets("配車表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("配車表").Range("s1").Value, To:=Sheets("配車表").Range("t2").Value, Collate:=True, IgnorePrintAreas:=False Dim str As String str = Worksheets("連絡票").Range("r1") Worksheets(str).Select End Sub いろいろ解らないなりに書き換えをしてみましたが、やっぱり2番目のシートから印刷ができません。 教えていただけませんでしょうか。

  • エクセル マクロで教えてください

    下記のマクロがうまく働きません SUB印刷01は単独ではいくのですが、繰返しをするとプレビューの行で止まります。SHEETオブジェクトがおかしいというのですが私には分かりません宜しくお願いします Sub 印刷01() With ActiveSheet.PageSetup .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 47 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Sub Sub 印刷繰返し() Dim WS As Object For Each WS In Sheets WS.Activate Call 印刷01 Next End Sub

  • エクセル VBA SHeetの隠し

    エクセルマクロでThisWorkbookの 記述に下記のようにしました! つまりSheet2を隠す為にしました! Sheet2はマスターなのでそこを使用者に 触らせないように!と思いしましたが・・・ いざ、ファイルを開くと{マクロを有効にする} をクリックしすと{編集の為にロックされています} と表示され読み取り専用になってしまいます! 記述が間違っているのでしょうか? しかもファイルを閉じるとエラー表示され エラーを報告を送信しますか?と必ず表示されます! 他のファイルは問題なく開いたり閉じたり出来ます。 やはり、記述の問題なのでしょうか? 教えて下さい! Private Sub Workbook_Activate() Dim Msg As String, Sn As Variant Sheets("入力").Visible = True Sheets("Sheet2").Visible = False Sheets("グラフ").Visible = True Sheets("入力").Activate UserForm1.Hide End Sub

  • 強制的にマクロを有効にする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 エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

専門家に質問してみよう