プロが教えるわが家の防犯対策術!

「改ページプレビュー」ボタンを無効にする方法

はじめまして。
Access側からVBAで、Excelのファイルのシートを
印刷プレビュー画面として表示させることにしています。
(バージョンはOffice2002です。)
====================================
Private Sub cmd01_Click()

Dim xls As Object 'Excel.Application
Dim wkb As Object 'Excel.Workbook

Set xls = CreateObject("Excel.Application")
Set wkb = xls.Workbooks.Open(FileName:="C:\TEST01.xls", ReadOnly:=True)
xls.Visible = True
xls.UserControl = True
wkb.PrintPreview EnableChanges:=True
xls.Workbooks.Close

Set wkb = Nothing
Set xls = Nothing

End Sub
====================================

印刷プレビュー画面の表示までは一応できているのですが、その際、
画面に表示されているボタン、特にその中でも
「改ページプレビュー」ボタンを無効にする方法がわかりません。

いろいろと調べても指定方法はわからず、ネットで検索しても、このボタンの
制御方法に言及しているサイトは1つか2つぐらいなので、もしかしたら
このボタンのVBAでの制御方法は公開されていないのかと思ってしまうほどです。

Excel2007では、印刷プレビュー画面において「改ページプレビュー」ボタン
は最初から表示されず無くなっていますので、一般には意識されていないのかも知れま
せん。

唯一見つかったサイトでのコーディングでは、コールバック関数形式も使って
説明されていましたが、それを試してみてもどうしてもこのボタンを無効にする事が
できませんでした。

「設定」ボタンと「余白」ボタンは無効にできますが、その方法では他のボタンの
制御には適用できないようなコーディングになっているので、行き詰まっています。


どなたか、Excelの印刷プレビュー画面(2007より前)における
「改ページプレビュー」ボタンを、VBAによって無効にする方法があれば、
教えていただけないでしょうか。


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

A 回答 (2件)

>フリーズの原因でも判ればいいのですが、なかなか困難そうです。


コードの提示があれば、他の方からも有益なアドバイスがあるかもしれません。
何分、私は素人なものですから、AddressOf演算子を用いたコールバック処理に関するテーマは躊躇してしまいます。
今の情報だけで言える事は、エラー制御はしっかりやっておいたほうが良いですよ、という事につきます。
最低でも

TimerId = SetTimer(0&, 0&, 10&, AddressOf TimerProc)
On Error Resume Next
Sheet1.PrintPreview
On Error GoTo 0
KillTimer 0&, TimerId

のようにOn Error Resume Next ステートメントの記述は必須でしょうね。

別案件ですが参考。
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips15.htm
『エクセルでは、コールバックで呼ばれた処理の中で「実行時エラー」が発生し中断するとクラッシュする可能性があります。』
『仕組みを充分に理解した上で 『 自己責任 』 において行なってください。』
    • good
    • 0
この回答へのお礼

end-u様

再び、有用なアドバイスをどうも有り難うございました。

今回の現象の克服如何に関係なく、
いただいたご忠告をこれから生かしていきたいと思います。


いただいた回答の内容からも、end-u様は堅実な手法を採って
おられるのが伝わってきます。
個人的には、とても頼りになる方だなと感じました。


また何かあれば、お力を貸していただければとても助かります。
その時は、ご迷惑かも知れませんが、どうかよろしくお願いします。


本当にどうも有り難うございました。

お礼日時:2010/05/13 00:15

>唯一見つかったサイトでのコーディングでは、コールバック関数形式も使って


>説明されていましたが、それを試してみてもどうしてもこのボタンを無効にする事が
>できませんでした。
http://homepage2.nifty.com/kmado/kvba.htm
このサイトでしょうか。

ExcelVBA側で実行してみるとどうでしょう。
おそらく成功するのではないかと思います。
AccessVBA側からだと修正が必要になりますね。
私も試してみましたが、どうもうまくいきません。
取りあえずはExcelBook側にコードを置いて、
Bookを開いたら
xls.Run "TEST01.xls!testProcedure"
みたいな手法もありますが。
そういった仕様では無理がある場合、他の方のレスもお待ちください。
    • good
    • 0
この回答へのお礼

end-u様
早速の回答をどうも有り難うございました。

まず、参考にしていたサイトは、ズバリご指摘の通りのサイトです。
そこでのコーディングを参照していろいろと検討していたところです。


今回、end-u様に薦めてもらった通り、Excel側にコーディング
して試してみたところ、意図していた機能を実現する事ができました。
「改ページプレビュー」ボタンだけを狙い撃ちにして無効にすること
に成功したのです。

これはまさに“目からウロコ”といったところで、とても感謝する
ところです。

有用な助言を誠に有り難うございました。


一点、問題点は残っていて、このExcelファイルをAccess側
からキックして表示しようとすると、アプリケーション自体がフリーズ
して、双方応答なしの状態になってしまいます。
Excelファイルは開かれず、Accessも反応しなくなります。

デリケートな領域で制御しているということなのでしょうか。
フリーズの原因でも判ればいいのですが、なかなか困難そうです。




いずれにせよ、今回のend-u様のご助言には心から感謝しています。
本当に有り難うございました。

お礼日時:2010/05/07 23:06

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