[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/06/08(Wed) 17:21
投稿者名:コラボ
Eメール:
URL :
タイトル:
Excelのプレビュ動作
いつも問題解決に利用させていただいてます。
さて、早々ですがExcelのプレビュ動作についてご教授下さい。
以下のような段取りでExcelを非表示で立ち上げ
必要なデータ(セルに数値を代入)を転送し、
プレビュを表示させています。
私の環境(XP+Excel2000)ではプレビュ画面が立ち上がるのですが
Excel2002ではタスクバー?(スタートボタンの並びに表示されるヤツ)
が点滅するだけでプレビュ画面が立ち上がりません。
(点滅しているところをクリックすればプレビュは立ち上がります。)

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
'Excelオブジェクトの作成
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(mTempExcelFile)
Set xlSheet = xlBook.Worksheets(1)
'Excelは非表示
xlApp.Visible = False
'以下WorkSheetに書込
'中略
'転送を終了した旨を伝えるダイアログを表示
frmEffect.Show 1
'ダイアログの終了ボタン(Unload.me)でここに戻り以下を実行
'Excelを表示してプレビュ
xlApp.Visible = True
xlApp.ActiveWindow.SelectedSheets.PrintPreview

.PrintPreviewの使い方に問題があるのでしょうか?
VB6(SP6),参照設定はExcel9.olbを使っています。
ちなみに、上記の方法ではWorkSheetが見えてから
プレビュ画面が表示されますが、一発でプレビュ画面を
表示させる方法は有るのでしょうか?

投稿時間:2005/06/09(Thu) 12:01
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelのプレビュ動作
> Excel2002ではタスクバー?(スタートボタンの並びに表示されるヤツ)
> が点滅するだけでプレビュ画面が立ち上がりません。
> (点滅しているところをクリックすればプレビュは立ち上がります。)

それは、Windows98からの仕様です。
SetForegroundWindow API 等を使って対処して下さい。
MS の技術資料に記載されていたのですが、VB6.0関係は、削除されたり、アドレスが
変ったりでちょっと見つかりませんでしたが API関数名で検索すればサンプルは見つかります。

hhttp://www.bcap.co.jp/hanafusa/dotnet/App06.htm

No.2891 Re:Shell関数を使用したアプリケーション起動  投稿者:ゆう(U) [01/10/06(土)16:07分]
hhttp://www.bcap.co.jp/hanafusa/VBdengon/log_2851to2900.htm


> ちなみに、上記の方法ではWorkSheetが見えてから
> プレビュ画面が表示されますが、一発でプレビュ画面を
> 表示させる方法は有るのでしょうか?

下記ではどうでしょうか?
xlBook.Windows(1).Visible = False
xlApp.Visible = True
xlSheet.PrintPreview

投稿時間:2005/06/09(Thu) 19:07
投稿者名:コラボ
Eメール:
URL :
タイトル:
Re^2: Excelのプレビュ動作
早々のご教授有り難うございます。

> 下記ではどうでしょうか?
> xlBook.Windows(1).Visible = False
> xlApp.Visible = True
> xlSheet.PrintPreview

上記方法は「Bookを非表示にしてSheetをプレビュ」
と解釈しました。そこでBook単位でBook内の選択されている任意のSheetを表示できないかと
SheetをBook、BookをAppとして試行錯誤しているのですが
xlAppを非表示にするとxlBook.PrintPreviewがエラーとなるため悩んでいます。
今一度お知恵を拝借できれば幸いです。

投稿時間:2005/06/09(Thu) 22:18
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Excelのプレビュ動作
>WorkSheetが見えてからプレビュ画面が表示されますが・・・・
WorkSheetが見えるのがいやだったのでは?

>Book単位でBook内の選択されている任意のSheetを表示できないかと
任意のSheetを表示したいならシート名を指定するだけでは。
xlBook.Windows(1).Visible = False
xlApp.Visible = True
xlBook.Worksheets("Sheet2").PrintPreview

又は、宣言時に Set xlSheet2 = xlBook.Worksheets(2)
xlSheet2.PrintPreview

それに[Book内の選択されている任意のSheetを]って、これ矛盾していません。
選択されているとは、表示されていてアクティブであるという事と違うのですか?
シートが表示されているのだから見えて当然ですよね。見えなけりゃ選択できないし。

> SheetをBook、BookをAppとして試行錯誤しているのですが
意味がよく理解できませんが

> xlAppを非表示にするとxlBook.PrintPreviewがエラーとなるため悩んでいます。
 >xlApp.ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow プロパティを使っていては尚更かと。
(非表示すれば、ActiveなWindow なんてあるはずないし)
結局何をしたいのでしょうか?
なぜ、そのような事が必要なのでしょうか?

投稿時間:2005/06/10(Fri) 00:46
投稿者名:コラボ
Eメール:
URL :
タイトル:
Re^4: Excelのプレビュ動作
ご教授有り難うございます。

> 任意のSheetを表示したいならシート名を指定するだけでは。
>  xlBook.Windows(1).Visible = False
>  xlApp.Visible = True
>  xlBook.Worksheets("Sheet2").PrintPreview
>
> 又は、宣言時に Set xlSheet2 = xlBook.Worksheets(2)
> xlSheet2.PrintPreview

これで全く問題ないのです。

> 結局何をしたいのでしょうか?
> なぜ、そのような事が必要なのでしょうか?

見栄えが良くなったら少し
スケベ心が湧き、以下のような事ができないかな?と思ったのです。
BookはSheet1〜5の5枚構成
Sheet1はデータ入力用
Sheet2〜4は計算用
Sheet5が計算結果

Sheet5だけを表示していたのですが、検算用にSheet4も表示したい。
そのときExcelのプレビュ画面の次頁、前頁ボタンでSheet4,5を切り替えるため
ExcelでSheet4,5を選択状態(Shiftを押しながらタブを指定するやり方)にして
保存し、BookをPrintPreviewにしてみたのです。

> > SheetをBook、BookをAppとして試行錯誤しているのですが
> 意味がよく理解できませんが

Sheet単位のプレビュが、ご教授いただいた方法でできたので、
Book単位でも可能なような気がして試していた次第です。

投稿時間:2005/06/13(Mon) 22:58
投稿者名:通りすがりの暇人
URL :
タイトル:
Re^5: Excelのプレビュ動作
はじめまして、通りすがりですが、お答えできそうでしたので。。。

> Sheet5だけを表示していたのですが、検算用にSheet4も表示したい。
> そのときExcelのプレビュ画面の次頁、前頁ボタンでSheet4,5を切り替えるため
> ExcelでSheet4,5を選択状態(Shiftを押しながらタブを指定するやり方)にして
> 保存し、BookをPrintPreviewにしてみたのです。

> xlBook.Worksheets("Sheet2").PrintPreview
この部分を以下のようにすれば出来るのでは?
xlBook.Worksheets(Array("Sheet4","Sheet5").PrintPreview
とすれば複数のシートのプレビュが表示されますよ。
ただし、Arrayの中のシートの順番を変えても、プレビュに表示されるのは
シート番号の小さいシートから順番ですけどね。

横スレ失礼

投稿時間:2005/06/14(Tue) 14:01
投稿者名:コラボ
Eメール:
URL :
タイトル:
解決、御礼
> > xlBook.Worksheets("Sheet2").PrintPreview
> この部分を以下のようにすれば出来るのでは?
> xlBook.Worksheets(Array("Sheet4","Sheet5").PrintPreview

これで、やりたかった事ができました。有り難うございました。