- ベストアンサー
Excel VBAで改ページから標準へ
- Excel VBAを使用して、改ページから標準表示に戻す方法について教えてください。
- ブックAのマクロで、ブックBを開き、ブックAの情報をブックBに貼り付けます。その後、ブックBの各シートの改ページを手動で修正し、保存ボタンを押すとブックBの全てのシートが標準表示に戻ります。しかし、最初の保存では最初のシートしか標準に戻らず、2度目の保存で全てのシートが標準に戻る現象が起こります。
- このような現象が起こる原因や解決方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。Wendy02です。 個々の内容に関しては、4.以外は、すでに、ここのカテゴリでも、Q&Aは出ていますが、以下は、もう、いわゆる「システム」ですから、その全体を仕上げるというのは、また、統合力というものが必要になってしまいます。簡単に見えてもなかなか出来ないのです。システムというのは、たかがExcelでも、プロの範疇なのです。しかし、何とか、ご自身で扱える範囲の中で、より良いものに近づけていく方法がよいのではないかと思っています。 ------------------------------------------------ *させたい動作 1. ブックAのマクロで、ブックBを開く 2. ブックAの情報をブックBに貼り付ける 3. データの量によって改ページが崩れるため、ブックBの改ページを手動で直す 4. 保存ボタンを押すことにより、ブックBの全てのシートを標準に戻す ------------------------------------------------ 現在、どこまで出来ているのかわかりませんが、4. に関しては、なるべく既存のボタンという方法は外したほうがよいです。私は、既存のボタンにインスタンスの設け方という方法を提示できないわけではありませんが、Excel共通のグローバルな仕様を求めているわけではありませんから、Aのブックにツール(コントロールツールやツールバーに付けた)ボタンで十分のような気がします。まず、そこらから手をつけるべきではないか、と私は思っています。 ネットでは、VBAのクラス・インスタンスは、結構公開されてはいるのですが、どちらかというと、VB(6)からのダウンサイズのワザを見せているだけで、実際使ってみると、本当のコンパイルではありませんから、そのコードに対して、Untouchable(壊れやすいコードだから触らないほうがよいもの) になってしまうのです。良く分かっていないと、さっぱり原因がつかめなくなってしまいます。また、その内容とパフォーマンスのバランスの悪いものも多いのです。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 「Private Sub Workbook_BeforeSave」 >ブックAのマクロで、上記マクロが記述されているブックBを呼び出し >名前を付けて保存をしています。 こちらの解釈が間違っているかもしれませんが、何度か読み直してみると、何か、すごい高度なことをしようとされているように思いますね。ブックのBイベントの呼び出しは出来るとは思うのですが、技術的に複雑になると、内容が不自然だと思います。 イベント・ドリブン型は、あくまでも、「自ブック」の動作(Action)を起動にするものです。 ・ブックAのマクロで、ブックBを開く ・ブックAの情報をブックBに貼り付ける ・データの量によって改ページが崩れるため、ブックBの改ページを手動で直す *・保存ボタンを押すことにより、ブックBの全てのシートを標準に戻す 今のところ、* の部分だけだとは思いますが、 ブックAから、ActiveWorkbook または、WorkBooks("B.xls") と、単に操作すればよいのではありませんか? Private Sub CommandButton1_Click() Dim ws As Worksheet 'シートの標準化 For Each ws In ActiveWorkbook.Worksheets '開いているブックのシート ws.Activate ActiveWindow.View = xlNormalView ActiveWindow.Zoom = 100 Next With Application.Dialogs(xlDialogSaveAs) '保存 .Show ActiveWorkbook.Name End With End Sub ただ、もしかして、「保存ボタン」というのは、既存のコマンド・ボタンのことでしょうか? ツールボタンなら、「個人用マクロブック」に登録すればよいのですが、既存のボタンですと、インスタンスを作らないていけないのです。
補足
2度目の質問にもお答え頂き、感謝いたします。 たしかに私のスキルを超えた事なのかもしれません。 混乱してしまいました。 ブックAは一種類のExcelファイルなのですが 実はブックBは何種類もあります。 そして、ブックB内のシート数は定まっておりません。 そのためシート名は変数に格納しているのです。 初めはブックAから操作したのですが、うまく行かず ブックBからならば!と思っていたのですが、こちらも駄目で もう何がいけないのか、さっぱりです。 コードにWorksheets("Sheet1").Activateなどのように シート名を表示させるとうまく行くようなので、 変数の格納の仕方が悪いのか?と思ったのですが・・・。 それと「保存ボタン」は既存のコマンド・ボタンです。 インスタンスの意味が解らず・・・ Wendy02様のコードを参考に、もっと勉強します。 毎回本当にありがとうございます。
お礼
さらにアドバイスをありがとうございます。 お礼が遅くなってしまってすみません。 状況は改善できていないのですが、大変勉強になります。 背伸びせず、出来ることからやってみます。