プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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で設定したオブジェクト)が消えてしまうことはないのですが、時々、他のマクロで役に立たなくなることがあります。別に壊れたわけではないのですが、再びブックを開いてあげないといけません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/24 18:43

こんにちは。



こんなスタイルでよいと思いますね。
#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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/22 19:59

印刷前なら表示できると思いますが、印刷後に表示するのは


VBAでは出来ないと思います。
APIでは出来るのかもしれませんが。
識者のレスをお待ち下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/22 18:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています