• ベストアンサー

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

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2の回答者です。 クラスなどは馴染みが薄いかもしれませんが、順序立てて説明します。 VBEditor - 挿入 -クラスモジュール(C) クリックで、Class1 が出来ますから、そこに、クラスモジュール用のコードを貼り付けます。 次に、VBEditor - 挿入 -標準モジュール(M) で、標準モジュールが出来ますから、そこに、標準モジュール用のコードを貼り付けます。 一旦、そこで、Ctrl + S で、保存してしまってください。 次に、ブックを閉じて、再び開くか、そのまま、Auto_Open を実行してしまってください。(Aut_Open のところにカーソルを置いて、[F5] を押します) 後は、Alt + Q で、VBEditor を閉じます。 ○プリンタのツールアイコンの[印刷] をクリックすれば、印刷した後に、メッセージボックスで、ページ数が出てきます。(今回は、ツールアイコンだけです。) いきなり、[印刷] がちょっとまずいようでしたら、 Class のコードを ActiveSheet.PrintOut Preview:=True にしておいてください。 もし、クラスを書き換えたら、再び、標準モジュール上のAuto_Open を実行します。ふだんは、ブックを開けただけで、設定されますが、このマクロは、完全に出来上がったら、プロジェクトに簡単なロックをしてしまったほうがよいです。あまりインスタンス(Class1で設定したオブジェクト)が消えてしまうことはないのですが、時々、他のマクロで役に立たなくなることがあります。別に壊れたわけではないのですが、再びブックを開いてあげないといけません。

tama-mama
質問者

お礼

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

tama-mama
質問者

お礼

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

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

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

tama-mama
質問者

お礼

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

関連するQ&A

専門家に質問してみよう