Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4720 / 13644 ツリー ←次へ | 前へ→

【54846】beforeprintについて hisao 08/4/1(火) 18:13 質問[未読]
【54914】Re:beforeprintについて n 08/4/3(木) 21:13 発言[未読]
【54941】Re:beforeprintについて hisao 08/4/5(土) 9:14 お礼[未読]
【54943】Re:beforeprintについて n 08/4/5(土) 18:31 発言[未読]
【54949】Re:beforeprintについて hisao 08/4/6(日) 17:44 お礼[未読]
【54950】Re:beforeprintについて n 08/4/6(日) 18:00 発言[未読]
【54959】Re:beforeprintについて hisao 08/4/7(月) 13:18 お礼[未読]

【54846】beforeprintについて
質問  hisao E-MAIL  - 08/4/1(火) 18:13 -

引用なし
パスワード
   またまたお助け下さい。
previewを出して印刷した場合のみ ある一定の作業をさせたいのですが
beforeprintでは preview の段階で作業をしてしまいます
printoutでのみ作業させるか、逆にpreviewを閉じた時に何らかの作業をさせる事は出来ないのでしょうか?

【54914】Re:beforeprintについて
発言  n  - 08/4/3(木) 21:13 -

引用なし
パスワード
   こんにちは。
なかなかレスがつかないようですね。
WithEventsでプレビュークリックを捉まえて、
[プレビュー]or[印刷]を判定すればできるかなと思ったんですが、
[ページ設定]ダイアログにも[プレビュー]がありましたね...ちょっと挫折しましたorz

...で、代案なのですが、
BeforePrintで印刷を制限して、[プレビュー]or[印刷]を自前のコマンドからでないと実行できないようにする
...という案ではだめでしょうか。

'ThisWorkbook Module
Option Explicit

Private flg As Boolean

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  If Not flg Then
    Cancel = True
    MsgBox "印刷/プレビューはオリジナルメニューから"
  End If
End Sub

Sub test1()
  flg = True
  ActiveSheet.PrintPreview
  flg = False
End Sub

Sub test2()
  flg = True
  ActiveSheet.PrintOut
  flg = False
End Sub

【54941】Re:beforeprintについて
お礼  hisao E-MAIL  - 08/4/5(土) 9:14 -

引用なし
パスワード
   ▼n さん:
お返事大変有り難うございました。
やはり 印刷とプレビューを分けるしか方法が無いでしょうね
一旦プレビューを出して、プレビュー・ダイアログで印刷かキャンセルか選択してキャンセルの場合はある操作を取り消したいと言う希望が有ったものですから困りました。
クラス・モジュールかなんかで、プレビューのダイアログの”閉じる”イベントで
マクロ実行する方法が有れば有り難いのですが。

>こんにちは。
>なかなかレスがつかないようですね。
>WithEventsでプレビュークリックを捉まえて、
>[プレビュー]or[印刷]を判定すればできるかなと思ったんですが、
>[ページ設定]ダイアログにも[プレビュー]がありましたね...ちょっと挫折しましたorz
>
>...で、代案なのですが、
>BeforePrintで印刷を制限して、[プレビュー]or[印刷]を自前のコマンドからでないと実行できないようにする
>...という案ではだめでしょうか。
>
>'ThisWorkbook Module
>Option Explicit
>
>Private flg As Boolean
>
>Private Sub Workbook_BeforePrint(Cancel As Boolean)
>  If Not flg Then
>    Cancel = True
>    MsgBox "印刷/プレビューはオリジナルメニューから"
>  End If
>End Sub
>
>Sub test1()
>  flg = True
>  ActiveSheet.PrintPreview
>  flg = False
>End Sub
>
>Sub test2()
>  flg = True
>  ActiveSheet.PrintOut
>  flg = False
>End Sub

【54943】Re:beforeprintについて
発言  n  - 08/4/5(土) 18:31 -

引用なし
パスワード
   >>[ページ設定]ダイアログにも[プレビュー]がありましたね...ちょっと挫折しましたorz
Application.CommandBars.FindControl(ID:=247)もWithEventsで捉まえて
Application.Dialogs(xlDialogPageSetup).Show と入れ替えると
こちらのウィンドウには[プレビュー]がありません。
なので
Application.CommandBars.FindControl(ID:=109)をラップするだけで
[プレビュー]クリックを判断する事ができそうです。
あとはフラグをうまく使えばキャンセルも判定できると思います。

'ThisWorkbook Module
Option Explicit

Private flg As Boolean
Private WithEvents prvCB As Office.CommandBarButton
Private WithEvents pstCB As Office.CommandBarButton

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set prvCB = Nothing
  Set pstCB = Nothing
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  If flg Then
    MsgBox "preview"
    flg = False
  End If
End Sub

Private Sub Workbook_Open()
  Set prvCB = Application.CommandBars.FindControl(ID:=109)
  Set pstCB = Application.CommandBars.FindControl(ID:=247)
End Sub

Private Sub prvCB_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  'MsgBox "preview_click"
  flg = True
End Sub

Private Sub pstCB_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  CancelDefault = True
  Application.Dialogs(xlDialogPageSetup).Show
End Sub

【54949】Re:beforeprintについて
お礼  hisao E-MAIL  - 08/4/6(日) 17:44 -

引用なし
パスワード
   ▼n さん:
度々のご教示 大変有り難うございました。
やって見ます。

>>>[ページ設定]ダイアログにも[プレビュー]がありましたね...ちょっと挫折しましたorz
>Application.CommandBars.FindControl(ID:=247)もWithEventsで捉まえて
>Application.Dialogs(xlDialogPageSetup).Show と入れ替えると
>こちらのウィンドウには[プレビュー]がありません。
>なので
>Application.CommandBars.FindControl(ID:=109)をラップするだけで
>[プレビュー]クリックを判断する事ができそうです。
>あとはフラグをうまく使えばキャンセルも判定できると思います。
>
>'ThisWorkbook Module
>Option Explicit
>
>Private flg As Boolean
>Private WithEvents prvCB As Office.CommandBarButton
>Private WithEvents pstCB As Office.CommandBarButton
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  Set prvCB = Nothing
>  Set pstCB = Nothing
>End Sub
>
>Private Sub Workbook_BeforePrint(Cancel As Boolean)
>  If flg Then
>    MsgBox "preview"
>    flg = False
>  End If
>End Sub
>
>Private Sub Workbook_Open()
>  Set prvCB = Application.CommandBars.FindControl(ID:=109)
>  Set pstCB = Application.CommandBars.FindControl(ID:=247)
>End Sub
>
>Private Sub prvCB_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
>  'MsgBox "preview_click"
>  flg = True
>End Sub
>
>Private Sub pstCB_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
>  CancelDefault = True
>  Application.Dialogs(xlDialogPageSetup).Show
>End Sub

【54950】Re:beforeprintについて
発言  n  - 08/4/6(日) 18:00 -

引用なし
パスワード
   Application.CommandBars.FindControl(ID:=4)
にも[印刷プレビュー]がありました。
この[印刷プレビュー]を捉まえるのはちょっとわかりません。
やっぱり【54914】のセンで考え直したほうが良いかもしれません。
後はAPI利用になってしまうと思います。

【54959】Re:beforeprintについて
お礼  hisao E-MAIL  - 08/4/7(月) 13:18 -

引用なし
パスワード
   ▼n さん:
有り難うございます

>Application.CommandBars.FindControl(ID:=4)
>にも[印刷プレビュー]がありました。
>この[印刷プレビュー]を捉まえるのはちょっとわかりません。
>やっぱり【54914】のセンで考え直したほうが良いかもしれません。
>後はAPI利用になってしまうと思います。

4720 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free