こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

印刷後メッセージボックスを表示したい

VBA初心者です。
エクセルで作成したワークシートの中で特定のシートを印刷した後にメッセージボックスで” 枚印刷しました”と表示させたいのですが、できないでしょうか?
印刷はVBAを組まずにツールバーをクリックでしたいです。
うまく説明ができなくてわかりにくいかもしれませんが宜しくお願いいたします。

投稿日時 - 2008-03-22 11:39:07

QNo.3884489

困ってます

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

#2の回答者です。

クラスなどは馴染みが薄いかもしれませんが、順序立てて説明します。

VBEditor - 挿入 -クラスモジュール(C) クリックで、Class1 が出来ますから、そこに、クラスモジュール用のコードを貼り付けます。

次に、VBEditor - 挿入 -標準モジュール(M) で、標準モジュールが出来ますから、そこに、標準モジュール用のコードを貼り付けます。

一旦、そこで、Ctrl + S で、保存してしまってください。

次に、ブックを閉じて、再び開くか、そのまま、Auto_Open を実行してしまってください。(Aut_Open のところにカーソルを置いて、[F5] を押します)

後は、Alt + Q で、VBEditor を閉じます。

○プリンタのツールアイコンの[印刷] をクリックすれば、印刷した後に、メッセージボックスで、ページ数が出てきます。(今回は、ツールアイコンだけです。)

いきなり、[印刷] がちょっとまずいようでしたら、

Class のコードを
ActiveSheet.PrintOut Preview:=True

にしておいてください。

もし、クラスを書き換えたら、再び、標準モジュール上のAuto_Open を実行します。ふだんは、ブックを開けただけで、設定されますが、このマクロは、完全に出来上がったら、プロジェクトに簡単なロックをしてしまったほうがよいです。あまりインスタンス(Class1で設定したオブジェクト)が消えてしまうことはないのですが、時々、他のマクロで役に立たなくなることがあります。別に壊れたわけではないのですが、再びブックを開いてあげないといけません。

投稿日時 - 2008-03-22 23:21:27

お礼

詳しい説明をありがとうございます!!
できました!!
感動しています!!
こんなぺーぺーの初心者におつきあいくださり、ありがとうございましたm(_ _)m

投稿日時 - 2008-03-24 18:43:37

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

こんにちは。

こんなスタイルでよいと思いますね。
#1のおっしゃるAPIもありますが、イベントを新たに作らないといけませんね。私は、あまり新しいイベントを設ける方法が好きではないです。他のマクロに影響が出てくるように感じるからです。以下の方法は、ボタンのインスタンスを設ける方法で、本来、クリックイベントだから、全体の負担はありませんね。

ツールバーでクリックだから、基本的にはツールバーのみに、イベントを設ければよいのではないでしょうか?

設定は、保存して再起動か、Auto_Open を実行させます。
'------------------------------------
' 標準モジュール
'------------------------------------
Public myClass(0) As New Class1
'配列にする理由は、ボタンの格納数を増やす可能性があるから
Sub Auto_Open()
 Call Class_Setting
End Sub
Private Sub Class_Setting()
With Application
   '印刷ボタン
   Set myClass(0) = New Class1
   Set myClass(0).clsCntl = .CommandBars.FindControl(, 2521)
End With
End Sub

'------------------------------------
'クラスモジュール
'-------------------------------------
Public WithEvents clsCntl As CommandBarButton

Private Sub clsCntl_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Dim lPage As Long
If Ctrl.ID = 2521 Then
  CancelDefault = True
  With ActiveSheet
    lPage = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
    ActiveSheet.PrintOut Preview:=False 'Trueはプレビューオン
    MsgBox "印刷は:" & lPage & "枚でした。"
  End With
End If
End Sub

投稿日時 - 2008-03-22 16:38:29

お礼

回答ありがとうございます。
そのまま貼り付けしたのですが動かなくて修正するにもどこがエラーなのかもわからず、自分の不勉強と無能に泣いています。
せっかく回答いただいたのにすみません。

投稿日時 - 2008-03-22 19:59:25

ANo.1

印刷前なら表示できると思いますが、印刷後に表示するのは
VBAでは出来ないと思います。
APIでは出来るのかもしれませんが。
識者のレスをお待ち下さい。

投稿日時 - 2008-03-22 14:43:02

お礼

早速の回答ありがとうございます。
APIは使用したことがないので、よくわかりません。
勉強不足ですみません。

投稿日時 - 2008-03-22 18:37:28

あなたにオススメの質問