• 締切済み

Excel 印刷禁止 マクロの作り方

毎年の期末で担当者が変わるため、 3/31で印刷を禁止するマクロを作りましたが、 これを応用して初めての使用後、30日で印刷が出来なくなるように しようと思いましたが、なかなか出来ません。どなたか力を貸してください。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim D As Integer D = (Now+30) - Now If D <= 0 Then Cancel = True MsgBox "30日経過しましたので、担当者へ連絡してして下さい。印刷できません", 48, " Else Cancel = False Exit Sub End If End Sub 以上 よろしくお願いします。

みんなの回答

回答No.3

#2です。 あぁ、穴だらけだ。。。w ・初回登録チェックは”Workbook_Open”でしてください ・初回登録した時点で警告を出さずに保存した方がいいかな  Application.DisplayAlerts = False   あとたぶん、まだまだ穴だらけ・・・w

回答No.2

Private Sub Workbook_BeforePrint(Cancel As Boolean) Const DAY_LIMIT As Integer = 30 ' 何日で使用不可にするか Const HIDE_SHEET As String = "HIDE_SHEET" ' 隠しシート名 Const START_DAY As String = "$B$1:$B$1" Dim i As Integer Dim f_Match As Boolean ' 初回登録完了か For i = 1 To Sheets.Count If (Sheets(i).Name = HIDE_SHEET) Then f_Match = True Exit For End If Next If (Not f_Match) Then ' 初回使用日を登録 Sheets.Add ActiveSheet.Name = HIDE_SHEET Sheets(HIDE_SHEET).Visible = False Sheets(HIDE_SHEET).Range(START_DAY) = Now Sheets(HIDE_SHEET).Range(START_DAY).Font.ColorIndex = 2 End If ' 使用期間チェック If (Sheets(HIDE_SHEET).Range(START_DAY) + CDate(DAY_LIMIT) <= Now) Then Cancel = True MsgBox "30日経過しましたので、担当者へ連絡してして下さい。印刷できません", 48, "" Else Cancel = False Exit Sub End If End Sub 適当に作ってみましたが 以下注意点 ・マクロを見られたらすぐ使用延長できる ・マクロパスワードはすぐ解除できる(解除出来ない方法もある) ・シートに使用開始日付を書いているのでバレたら使用延長できる とりあえず、シートに書いてるけど、可能であればレジストリに登録してください。

mtak2100
質問者

お礼

短時間にこれだけのマクロが出来るのはすごいですね。尊敬します。 よく試用版のソフトで30日で使用不可になるのをよく見てましたから、 私でも可能と思いきや、ここまでの力量がいるとは思いませんでした。 参考にさせて頂きます。 有り難うございます。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちくは。 ん? ん~。。。 >>D = (Now+30) - Now 「Now」は今のシステム日付。。。ですよね。 必ず「30」になるような? >>初めての使用後、30日で印刷が出来なくなるように 「初めての使用」をどこかに記録しておく必要があります。 でないと、「初めての使用から30日経過した」という判断が出来ませんので。 作業用シートを用意しておいて、画面上非表示にでもして、とあるセルに初印刷日を書き込んでおいて、 それと比較していく。のが一番イメージつきやすかったですね。自分としては。 まぁ、それ使用した人が、「上書き保存」しなかったりすると、無意味になりますけどね(笑 それも考えると、こっちから使用したら無理矢理上書き保存してやるのもいいっちゃいいのかな。

mtak2100
質問者

お礼

早々のご回答有り難うございます。 確かにD = (Now+30) - Now はまずいかと思いました。 作業シート作製の件、参考にさせて頂きます。

関連するQ&A

  • Excelのシートを印刷不可(禁止)にするにはどうしたら?

    同様の質問があると思うのですが、どうもうまくいきません。 Windows2000 Excel2000 で下記をコピーして入れてみたのですが、 印刷禁止にならないのです。 もしかすると、マクロを使えていないのかも知れません。 誰か、“猿”でもわかるぐらい、Excelシートの印刷禁止の方法を 優しく解説して頂けないでしょうか? 宜しくお願い致します。 (特にマクロをどう使ったらいいのかわかっていないです) Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "このExcelシートは、印刷できません", vbExclamation Cancel = True End Sub

  • エクセルのsheet1つだけの印刷制御について

    win xp office2003を使用しています。 全てのsheetの印刷制御は、下記の方法でできるのはわかっているのですが..... ************************************************* Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "このExcelシートは、印刷できません", vbExclamation Cancel = True End Sub ************************************************* 1つのシートだけを印刷できないようにするにはどうしたら良いでしょうか?

  • エクセルVBAのBeforePrintで

    ThisWorkbookモジュールで Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub MsgBox "BeforePrintイベント発生" End Sub を使って、Sheet1での印刷のイベントを取得できます。 ただ、指示がPrintなのかPrintPreviewなのかが取得できません。 印刷またはプレビューされる前にどちらの指示なのかを取得する方法がありますか?

  • エクセルVBA設定 パスワード入力しても印刷不可

    エクセルVBAでパスワードを入力しないと印刷できない設定にしました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Password = "1111" x = InputBox("印刷注意 パスワード") If x = Password Then Else Cancel = True End If End Sub パスワード【1111】を入力しても印刷できないのですが、なぜでしょう?

  • Excel 特定のシートを印刷不可にする方法

    教えてください。 Excelで、特定のシートを印刷不可にする方法はありますでしょうか? Book全体で印刷不可にする方法は、以下 '========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True '※1 タイトル = "ペーパーレス運動実施中!" スタイル = 48 'vbexclamation メッセージ = "印刷しないでください" 応答 = MsgBox(メッセージ, スタイル, タイトル) End Sub '========================== で可能なことは認識しています。 よろしくお願いします。

  • エクセル マクロ 印刷禁止設定について

    いつもお世話になっております。 職場の当該部署で作成している「エクセル」でのファイルが、他部署でも閲覧できるネットワーク環境にあるのですが、「当該部署では印刷が可能であるが、他部署は閲覧のみで印刷は不可」という設定にしたく、質問させて頂きました。 理想は、印刷時に「パスワード」を入力することで印刷が可能になる設定 にしたく、ネットで色々情報を探しましたところ、下記のようなマクロがありました。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Password = "1111" x = InputBox("印刷注意 パスワード") If x = Password Then Else Cancel = True End If End Sub 試した所、「印刷」をおすと「印刷注意 パスワード」の表示があり、下に入力があるため「1111」と入力をするんですが、印刷できずそのまま元のエクセル画面に戻ってしまいます。 私が理想としている マクロとは違うのでしょうか?何か、良いマクロがあればご教授頂ければ幸いです。宜しくお願い致します。

  • 印刷制御について

    VBA全くの初心者です Private Sub Workbook_BeforePrint(Cancel As Boolean) If Range("A1").Value = 文字 Then Cancel = True End If End Sub 上記ではA1に文字が入ってないと印刷が出来ないのは分かりますが 例えばsheet1を印刷する時は、A1とA3とB5に文字が入ってないと印刷出来ない様にして、Sheet2を印刷する時は、A2とA4とB6に文字が入ってないと出来ない様にする事は可能でしょうか?

  • 印刷したくない列を非表示にするマクロなのですが、

    印刷したくない列を非表示にするマクロなのですが、 印刷後、あらためて列を再表示する必要があり大変手間です。 印刷後も自動で再表示する方法をご教示いただきたく存じます。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Columns("A:C").Select Selection.EntireColumn.Hidden = True End Sub

  • エクセルの特定シート(複数)を印刷不可にするVBA

    教えてください。VBA超初心者です。 エクセルで、特定の複数のシート(指定シート)を印刷不可にする方法はありますでしょうか? いろいろと調べてみたところ、特定シート(一つ)を指定する場合はわかりました。 BBシート印刷不可。 ========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "BB" Then Exit Sub MsgBox "印刷できません" Cancel = True End Sub '========================== できれば、3つあるシートのうち、 AAシートは印刷可能。 BBシートとCCシートは、印刷不可。 としたいのです。 ご伝授いただけると助かります。よろしくお願いします。

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?