印刷プレビューをだすなら
PrintPreviewでわかるのですが、表示されたプレビュー画面を、自分で「閉じる」または「印刷」ボタンを押さなくとも閉じるにはどう書けばいいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (6件)

こんにちは。

興味があったんで追試してみました。
下記の順に並べ変えると動きます。

For i = 1 To 5
Range("D4") = i * 100
SendKeys "%c"
ActiveSheet.PrintPreview
Next

恐らく、プリントプレビューはモーダルで、ActiveSheet.PrintPreview を発行後は、プリントプレビューを閉じるまで、マクロが停止すると思われます。
↑で動くのは、キーを先送りし、開いたと同時に閉じるので、マクロが止らずに進んでいるだけで、動作としては不安定(端末によってはうまくいかない。)です。
実際↑を走らすと、アクティブセルに不明な空白が入力され、入力待ち状態でマクロが終了します。

なにかしらの事情があってのご質問とは思いますが、やはりプリントプレビューはユーザに閉じて頂くのが本筋ではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。キーを先送りすることで何とかクリアできました。
事情は、No3さんへのコメントに記載しました。

> プリントプレビューはモーダルで、> ActiveSheet.PrintPreview を発行後は、プリントプレビューを閉じるまで、マクロが停止すると思われます。

では、先ほど(No1)のマクロで一度閉じるを押すと、あと4回は押さなくとも自動で閉じたのはなぜなんでしょう?

お礼日時:2005/04/04 16:40

#4 です。


クリアできたとのこと。良かったですね。

>あと4回は押さなくとも自動で閉じたのはなぜなんでしょう?
これは、手押しのキーが先送り1回目と同じ役割をし、
以降、ループ1回目の SendKeys "%C" はループ2回目の先送りキーとして、ループ2回目の・・・・
と順じ先送りキーと解釈されて動いたと思います。
    • good
    • 0
この回答へのお礼

なるほど、ありがとうございます。

お礼日時:2005/04/04 19:34

No.1のものです。



何か回答増えてますが、
駄目でしたら、
SendKeys "%c" の下に
SendKeys "{ENTER}"
を下に書くとかは如何でしょう。

今テストできないので何ともいえませんが、
過去に似たようなものを作ったので
出来る様な気がするのですが・・・。
そうでなければごめんなさい。
興味がありますので頑張ってみてください。
一応自信なしに変えておきます^^;。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2005/04/04 19:34

>「印刷」ボタンを押さなくとも閉じるにはどう書けばいいのでしょうか?



やろうとしていることが、VBAでは、無理と思いますよ。

「閉じる」という意思を何をもってExcelに伝えるのですか?

プレビュー画面は、モーダルで開かれて、「閉じる」ボタンまたは、そのショートカットキー

で、フレビューを閉じない限り、VBAコードは、実行出来ないと思います。

ですから、PrintPreview の下に SendKeys を記述しても、手動で閉じてから実行される

と思います。

何のためにそのようなことが、必要なのでしょうか? 必要ないと思うが・・・

この回答への補足

> 何のためにそのようなことが、必要なのでしょうか? 必要ないと思うが・・・

ええ、通常は必要ないですよね。
今回は、本来はプリントプレビューじゃなく印刷させるマクロなんです。
でもかなり分量があるのでテスト版は印刷じゃなくてプレビューで渡して、スライドショーのように画面の動きを見てもらい、OKがでれば「印刷」にかえるつもりでした。

補足日時:2005/04/04 16:33
    • good
    • 0

テストしてませんが、


SendKeys "%C", True
でいかがでしょうか。
    • good
    • 0

印刷設定関連のマクロはちょっと頭が悪いと思うのですが、


ボタンを操作する処理を書きます。

「閉じる」ならCアンダーバーだと思いますが
(閉じるボタンの横にあるショートカットキー)
.SendKeys "%c"
の様になります。%はAltという意味です。
Ctrl+ なら "^" を使用します。
ちなみにタブ移動は"^{TAB}"です。
どちらにしろSendKeysステートメントで書きます。
    • good
    • 0
この回答へのお礼

さっそくありがとうございます。
以下でテストしてみました。

Sub TEST01()
For i = 1 To 5
Range("D4") = i * 100
ActiveSheet.PrintPreview
SendKeys "%C"
Next
End Sub

最初の一回はやはり閉じるを押さないとプレビューが終了しないようです。
一度押すと2~最後までは自動でプレビューを閉じ先に進みます。
どこが悪いのでしょうか?

お礼日時:2005/04/04 14:39

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Qエクセルマクロで印刷プリンタを指定する方法

表題のとおりなんですけと、エクセルのVBAでの印刷命令はできますが、複数あるプリンタから特定のプリンタを指定したいのですが、なにかいい方法ありませんか?

Aベストアンサー

印刷のポートがLPT1:(プリンタポート)ならば

例:プリンタ名 自分のプリンタ
Application.ActivePrinter = "自分のプリンタ on LPT1:" 'プリンタの指定
ActiveWindow.SelectedSheets.PrintOut '印刷

印刷ポートがLAN内のプリンタサーバーの場合

例1:プリンタ名 事務室プリンタ
Application.ActivePrinter = "事務室プリンタ on Ne01:"
ActiveWindow.SelectedSheets.PrintOut

例2:プリンタ名 会議室プリンタ
Application.ActivePrinter = "会議室プリンタ on Ne02:"
ActiveWindow.SelectedSheets.PrintOut

Ne01 Ne02はLANにより異なります。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QExcel VBA の印刷後の判定

いつもお世話になっています。
Excel VBA で不明な点が出てきたので質問させていただきます。

処理順として
1.AccessからExcelを出力し、出力後はそのまま表示しておく。
2.表示してあるExcelをユーザーが印刷する。
3.印刷したシートの見出しの色を変更する。

の3つなのですが、3の処理をExcelマクロで実行する際に、
印刷が実行されたかどうかの判別方法がわからないのです。

印刷直前でも構わないと思い、BeforePrint イベントを調べて使用してみたのですが、
印刷プレビューでもイベントが走ってしまい、ダメでした。

印刷実行なのか、プレビューなのか区別が出来る方法があればとも思っているのですが…。

ご存知の方、ご教授お願いいたします。

Aベストアンサー

こんにちは。

印刷したものと、プレビューしたもののイベントの区別をしたいということですね。いくつか方法を考えてみましたが、実際に印刷したかどうかは、API関数でしか把握できませんが、かなり大掛かりで、リスクを背負うことになってしまいます。私としては、あまりお勧めできません。

私が、実際の開発で、Excelの中だけでどう考えるかというと、あまり良い案は浮かびません。

'<ThisWorkbook>
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If PrinterFlg = False Then
 Cancel = True
End If
End Sub

'<標準モジュール>
Public PrinterFlg As Boolean

'<シートモジュール>
Private Sub CommandButton1_Click()
PrinterFlg = True
 ActiveSheet.PrintOut
 '他の作業
PrinterFlg = False
End Sub

こうすれば、PrinterFlg がTrue にならない限りは、印刷もプレビューもされませんので、後は、開発側の設けたボタンで、印刷が把握できます。そのボタンを押した時のみ、有効になるわけです。ユーザー側に余計なことをしてもらいたくない場合は、メニューバーやツールバーも隠します。自分が望むボタンだけを置くことにします。

ここまでは良いと思いますが、しかし、印刷プレビューを許す場合は、印刷プレビュー画面から印刷が可能ですから、そこでは、もう BeforePrint イベントが利きません。印刷プレビューのイベントで、例えば、PDF出力などのダミーのプリンタ・ドライバに切り替えるぐらいしか、今のところ思いつきません。やはり、API関数での制御になってしまいます。

根本的にPrint Out Preview と Print Out の違いというは、Excel上ではないかもしれません。

ちなみに、印刷プレビューのイベントというのは、以下のようなものです。

'Class 1
Public WithEvents myPrinterButton As CommandBarButton

Private Sub myPrinterButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  Application.ActivePrinter = " 別のプリンタドライバ "
End Sub

'標準モジュール
Dim myClass As Class1

Sub PreviewEventSetting()
Set myClass = New Class1
 Set myClass.myPrinterButton = Application.CommandBars("Standard").FindControl(, 109)
End Sub

なお、PreviewEventSetting を、ThisWorkbook の Open イベントから、Call すればよいと思います。

こんにちは。

印刷したものと、プレビューしたもののイベントの区別をしたいということですね。いくつか方法を考えてみましたが、実際に印刷したかどうかは、API関数でしか把握できませんが、かなり大掛かりで、リスクを背負うことになってしまいます。私としては、あまりお勧めできません。

私が、実際の開発で、Excelの中だけでどう考えるかというと、あまり良い案は浮かびません。

'<ThisWorkbook>
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If PrinterFlg = False Then
 Cancel = Tr...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。

マクロを含むエクセル(EXCEL2000)をHTMLのページからハイパーリンクで呼び出しています。そのエクセルでボタン操作に従い罫線やセルの着色を行っています。しかし、着色結果が更新されません。スクロールバー等で画面を移動すると正しく着色されています。このエクセルを通常に起動した場合は、問題なく動作するのですが、シート全体を更新する方法を教えて下さい。
各関数では、以下のスクリーンアップデータの処理を入れています。
Application.ScreenUpdating = False
    (処理)
Application.ScreenUpdating = False

Aベストアンサー

たぶん、EXCEL独特の問題だと思うのですが、HTML の場合、すでに色の部分を表面上で使用しているので、それでメモリが占有させているのではないかと私は思っています。

他にも、

 ActiveWorkbook.HTMLProject.RefreshDocument True

というのがありますね。
ホスト アプリケーション内のブックに含まれる HTML プロジェクトを更新する、というのがありますね。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報