[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『個人用マクロブックのThisWorkbook』(mickey)
ThisWorkbookのコードを個人用のマクロブックのThisWorkbookに記入したいのですが、
どのような書き方で記入したらよいでしょうか?
個人用マクロブックに登録しなくても、
ある特定のフォルダに保存している複数のBOOK(ファイル名はそれぞれ異なります)にのみ
有効になるようにしたいのですが、個人用マクロブックに登録する以外に
良い方法がありますか?よろしくお願いします。
次のようなコードです。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Worksheets("印刷用").Range("D3").Value = Format(Now(), yymmddhhmm)
Application.OnTime Now(), "ThisWorkbook.AfterPrint"
End Sub
Sub AfterPrint()
'ここに印刷後の処理コードを記述
Sheets(Array("入力設計", "印刷用")).Select
Sheets("印刷用").Activate
Sheets(Array("入力設計", "印刷用")).Copy
ActiveWorkbook.SaveAs fileName:= _
"C:\Users\keike_000\Documents\システム練習\" &
Sheets("印刷用").Range ("D4").Value & Sheets("入力設計").Range("D5").Value
& ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, WriteResPassword:="",
CreateBackup:=False
ActiveWindow.Close
Sheets("印刷用").Select
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
ほかのブックのイベントを取得する、ということですよね? http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=20518&rev=&no=0&P=R&KLOG=133
こちらにサンプルがありそうですが、参考になりますか? (稲葉) 2014/10/18(土) 23:27
すみません。VBAがまだよく理解できてなくて…
なんとなく、自分で調べた時もこんな感じのコードを入れてみたけど、書き方が悪いみたいで
うまくできませんでした。
他のBOOKでも使えるようにしたいのは、最初に書いた上記のコードですが、
その下に下記のようなコードもThisWorkbookに記入しています。
この処理は、このコードを書いてあるBOOKのみで有効になるように
したいのです。この部分はそのままでいいのでしょうか?
よろしくお願いします。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True '保存させない
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then '別名保存は許可します
ElseIf IsAdmin = False Then '上書き保存にはパスワードを要求します
Cancel = True
End If
End Sub
(mickey) 2014/10/20(月) 07:57
少しは自分で考えてみたらいかがでしょう?
個人用マクロブックのThisWorkBookモジュールに
Private WithEvents xApp As Application 'Applicationオブジェクトのイベントをキャッチする。
Private Sub xApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
MsgBox Wb.Path & vbNewLine & "テスト"
End Sub
一度エクセルをすべて閉じて(アプリケーションも)
再度立ち上げてから適当なブックを印刷しようとしてみてください。
>ある特定のフォルダに保存している複数のBOOK >次のようなコードです。 のコードも見ましたが、特定のブックがどこに保存されているのか、具体的に何をしたいのか 分からないのでご自身で記述頂くか、詳細に説明してください。
>Application.OnTime Now(), "ThisWorkbook.AfterPrint" こちらもなぜわざわざOnTimeメソッド?
即実行ならそのまま続けてコードを記述すればよいのでは?
やってみて出来なかったことを「なぜ出来ないのか」という聞き方でお願いします。 (稲葉) 2014/10/20(月) 15:34
今、個人用マクロブックに入れているので、
これを"C:\Users\keike_000\Documents\システム練習\"にある「.xlsm」のファイルを開いた時のみ、
印刷前の処理を有効にしたいのですが…
それから、変数の定義みたいなエラーメッセージがでるようになったので、今、「'Option Explicit」にしています。
必要ないでしょうか?
個人用マクロブックに記入しているコードは次のものです。
練習したものや確認したものが表示されてて見にくいと思いますが、申し訳ありません。
よろしくお願いします。
'Option Explicit
Private WithEvents xApp As Application 'Applicationオブジェクトのイベントをキャッチする。
Private Sub Workbook_Open()
Set xApp = Application
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set xApp = Nothing
End Sub
Private Sub xApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
'MsgBox Wb.Path & vbNewLine & "テスト"
Wb.Worksheets("印刷用").Range("D3").Value = Format(now(), yymmddhhmm)
' Dim A
' A = Wb.Worksheets("印刷用").Range("D3").Value
'A = Format(now(), yymmddhhmm)
'Application.OnTime Now(), "ThisWorkbook.AfterPrint"
Wb.Worksheets(Array("入力設計", "印刷用")).Select
Wb.Worksheets("印刷用").Activate
Wb.Worksheets(Array("入力設計", "印刷用")).Copy
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\keike_000\Documents\システム練習\" &
Wb.Worksheets("印刷用").Range("D4").Value & Wb.Worksheets("入力設計").Range("D5").Value & ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, WriteResPassword:="", CreateBackup:=False
End Sub (mickey) 2014/10/21(火) 14:59
ただ貼り付けただけじゃないか! 何のためにMsgBoxにWb.Pathを入れておいたと思うんですか。
IfでWb.Pathを比較して処理を分岐するだけじゃないですか。
(稲葉) 2014/10/21(火) 15:24
こんにちは。
> Private Sub Workbook_BeforePrint(Cancel As Boolean)
> Worksheets("印刷用").Range("D3").Value = Format(Now(), yymmddhhmm)
素朴な疑問、これってどうしても印刷直前にマクロで入れないとダメですか。
印刷用シートのD3セルにtoday関数でも入れておけば済むのではないでしょうか。
> それから、変数の定義みたいなエラーメッセージがでるようになったので、今、「'Option Explicit」にしています。 あ、そういうことは絶対にやっちゃダメです。 「Option Explicit」に戻してください。 エクセルさんがわざわざ「コードがおかしいですよ、直したほうがいいですよ」と 教えてくれているんです。「黙れ!」って対応はまずいです。 変数名は入力ミスしてないですか?
( 佳 ) 2014/10/21(火) 20:39
Private Sub xApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
Const myFn = "C:\Users\keike_000\Documents\システム練習\*xlsm"
If Not Wb.FullName Like myFn Then Exit Sub
MsgBox Wb.FullName & vbNewLine & "テスト"
End Sub
(マナ) 2014/10/22(水) 22:21
佳さん、ありがとうございます。
いろいろ勉強になりました。
>素朴な疑問、これってどうしても印刷直前にマクロで入れないとダメですか。 >印刷用シートのD3セルにtoday関数でも入れておけば済むのではないでしょうか。 印刷データを日付と時刻の番号で毎回自動保存するので、印刷直前がいいかと思いまして… Format関数は使わず、エクセルの書式設定で大丈夫でした。
マナさん、ありがとうございます。
動作確認できました。
このような方法があるんですね。意味も調べてみました。
(mickey) 2014/10/23(木) 20:41
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.